示例#1
0
    def testForOneFormSubmitted(self):
        """Tests the behavior when one form has been submitted."""
        # only enrollment form is submitted but not verified
        self.profile.student_data.consent_form = None
        self.profile.student_data.enrollment_form = ndb.BlobKey('blob-key')
        self.profile.student_data.is_enrollment_form_verified = False
        self.assertFalse(profile_logic.isFormVerificationAwaiting(
            self.profile))

        # only enrollment form is submitted and verified
        self.profile.student_data.is_enrollment_form_verified = True
        self.assertFalse(profile_logic.isFormVerificationAwaiting(
            self.profile))

        # only consent form is submitted but not verified
        self.profile.student_data.consent_form = ndb.BlobKey('blob-key')
        self.profile.student_data.is_consent_form_verified = False
        self.profile.student_data.enrollment_form = None
        self.profile.student_data.is_enrollment_form_verified = None
        self.assertFalse(profile_logic.isFormVerificationAwaiting(
            self.profile))

        # only consent form is submitted and verified
        self.profile.student_data.is_consent_form_verified = True
        self.assertFalse(profile_logic.isFormVerificationAwaiting(
            self.profile))
    def make_test_model(self):
        WidgetMessage = protopigeon.model_message(MessageModelTest)

        widget = MessageModelTest(
            string='a',
            repeatedString=['a', 'b', 'c'],
            keyProp=ndb.Key('Moew', 'Test'),
            repeatedKey=[ndb.Key('One', 'Cat'), ndb.Key('Two', 'Cat')],
            text='a',
            repeatedText=['a', 'b', 'c'],
            blob='abc',
            repeatedBlob=['abc', 'abc', '123'],
            boolean=True,
            repeatedBoolean=[False, True, False],
            integer=5,
            repeatedInteger=[1, 2, 3, 4, 5],
            float=3.14,
            repeatedFloat=[3.14, 1.23, 10.4],
            datetime=datetime.datetime.utcnow(),
            date=datetime.date.today(),
            time=datetime.datetime.utcnow().time(),
            repeatedDatetime=[datetime.datetime.utcnow(), datetime.datetime.now()],
            geopt=ndb.GeoPt(5, 5),
            repeatedGeopt=[ndb.GeoPt(5, 7), ndb.GeoPt(7, 8)],
            blobkey=ndb.BlobKey('oEFRyChdYLJbRk6cKXuniZfFtHct1wzDcnvVSgay91N7SoOCWTAWbDU8YcwQQbdn'),
            repeatedBlobkey=[ndb.BlobKey('oEFRyChdYLJbRk6cKXuniZfFtHct1wzDcnvVSgay91N7SoOCWTAWbDU8YcwQQbdn'), ndb.BlobKey('vQHMoSU5zK2zBxMA_fcP7A==')],
            structured=InnerModel(one='One', two=2),
            repeatedStructured=[InnerModel(one='One', two=2), InnerModel(one='Name', two=1)]
        )

        widget.put()

        return WidgetMessage, widget
示例#3
0
    def _decode(_result, _value):
        """
        Deserializes `dict` values to `ndb.Property` values.
        """
        for key, val in _value.iteritems():
            prop = cls._properties.get(key)
            # logging.error('prop: %s', dir(prop))
            if prop is None:
                logging.warn(
                    'entity_from_dict cannot decode: `%s`. Property is \
not defined on: `%s.%s`.', key, cls.__module__, cls.__name__)
                continue
            if isinstance(
                    prop,
                (ndb.DateTimeProperty, ndb.DateProperty, ndb.TimeProperty)):
                if prop._repeated:
                    val = [from_epoch(v) for v in val]
                else:
                    val = from_epoch(val)
            if isinstance(prop, ndb.BlobKeyProperty):
                if prop._repeated:
                    val = [ndb.BlobKey(urlsafe=v) for v in val]
                else:
                    val = ndb.BlobKey(urlsafe=val)
            if isinstance(prop, ndb.KeyProperty):
                if prop._repeated:
                    val = [ndb.Key(urlsafe=v) for v in val]
                else:
                    val = ndb.Key(urlsafe=val)
            if isinstance(prop, ndb.BlobProperty):
                pass
            _result[key] = val
        return _result
示例#4
0
    def testForTwoFormsSubmitted(self):
        """Tests the behavior when two forms have been submitted."""
        self.profile.student_data.enrollment_form = ndb.BlobKey('blob-key')
        self.profile.student_data.consent_form = ndb.BlobKey('blob-key')

        # no forms have been verified
        self.profile.student_data.is_consent_form_verified = False
        self.profile.student_data.is_enrollment_form_verified = False
        self.assertTrue(profile_logic.isFormVerificationAwaiting(self.profile))

        # only student id form is verified
        self.profile.student_data.is_enrollment_form_verified = True
        self.assertTrue(profile_logic.isFormVerificationAwaiting(self.profile))

        # only consent form is verified
        self.profile.student_data.is_consent_form_verified = True
        self.profile.student_data.is_enrollment_form_verified = False
        self.assertTrue(profile_logic.isFormVerificationAwaiting(self.profile))

        # both forms are verified
        self.profile.student_data.is_enrollment_form_verified = True
        self.assertFalse(profile_logic.isFormVerificationAwaiting(
            self.profile))
示例#5
0
    def setUp(self):
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()
        ndb.get_context().clear_cache()

        User(name="FancyName",
             google_id="123id",
             key=ndb.Key(pairs=[(User, 1)])).put()
        Project(name="name123",
                creator=ndb.Key(pairs=[(User, 1)]),
                createdOn=datetime.datetime(2016, 4, 25),
                key=ndb.Key(pairs=[(Project, 1)])).put()
        File(project=ndb.Key(pairs=[(Project, 1)]),
             blobKey=ndb.BlobKey("someGreatKey")).put()
        self.project = Project.query(Project.key == ndb.Key(
            pairs=[(Project, 1)])).fetch()[0]
        self.file = File.query(File.key == ndb.Key(pairs=[(File,
                                                           1)])).fetch()[0]
示例#6
0
 def post_data(self, data, filename=None, mime_type=None):
     mime_type = mime_type or mimetypes.guess_type(
         filename)[0] if filename else None
     mime_type = mime_type or 'application/octet-stream'
     filename = filename or "{0}{1}".format(
         self.key_as_string, mimetypes.guess_extension(mime_type))
     url = blobstore.create_upload_url('/_bscs/data')
     params = []
     params.append(
         MultipartParam("file",
                        filename=filename,
                        filetype=mime_type,
                        value=data))
     payload_generator, headers = multipart_encode(params)
     payload = str().join(payload_generator)
     key = None
     try:
         result = urlfetch.fetch(url=url,
                                 payload=payload,
                                 method=urlfetch.POST,
                                 headers=headers,
                                 deadline=10,
                                 follow_redirects=False)
         if "location" in result.headers:
             location = result.headers["location"]
             key = location[location.rfind("/") + 1:]
             return ndb.BlobKey(key) if key else None
         else:
             return None
     except Exception as e:
         logging.error(e)
         if key is not None:
             blob_info = blobstore.get(key)
             if blob_info is not None:
                 blob_info.delete()
         return None
示例#7
0
 def to_model(Message, property, field, value):
     return ndb.BlobKey(value)
示例#8
0
 def testForNoFormsSubmitted(self):
     """Tests the behavior when no forms have been submitted."""
     self.profile.student_data.consent_form = ndb.BlobKey('blob-key')
     self.profile.student_data.enrollment_form = None
     self.assertFalse(profile_logic.isFormVerificationAwaiting(
         self.profile))
示例#9
0
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.write('Hello, World!\n')

        primitive_python2_key = ndb.Key('PrimitiveProperties', 'python2')
        primitive_value = primitive_python2_key.get()
        if primitive_value:
            primitive_value.python2_updated_at.append(
                datetime.datetime.utcnow())
            primitive_value.put()
        else:
            primitive_value = PrimitiveProperties(
                id='python2',
                integer=1234567890,
                float=3.141592,
                boolean=True,
                string='hello world from python2',
                text='01234567890' * 150 + 'a',  # more than 1500 bytes.
                indexed_blob='0123456789' * 150,
                blob='01234567890' * 150 + 'a',
                datetime=datetime.datetime.utcnow(),
                datastore_key=ndb.Key('SomethingKind', 'SomethingValue'),
                blobstore_key=ndb.BlobKey('blob-key'))
            primitive_value.put()

        self.response.write('\n-----\n')
        self.response.write('primitive_value:\n')
        self.response.write(primitive_value)

        structured_key = ndb.Key('StructuredProperty', 'python2')
        structured = structured_key.get()
        if structured:
            structured.python2_updated_at.append(datetime.datetime.utcnow())
            structured.put()
        else:
            structured = StructuredProperty(
                id='python2',
                members=[
                    Member(user_key=ndb.Key('User', 1), role='admin'),
                    Member(user_key=ndb.Key('User', 2), role='member'),
                    Member(user_key=ndb.Key('User', 3), role='guest'),
                ],
                group_members=GroupMembers(name='sample-group',
                                           user_keys=[
                                               ndb.Key('User', 'sample-1'),
                                               ndb.Key('User', 'sample-2'),
                                           ]))
            structured.put()

        self.response.write('\n-----\n')
        self.response.write('structured:\n')
        self.response.write(structured)

        complex_key = ndb.Key('ComplexProperty', 'python2')
        complex = complex_key.get()
        if complex:
            complex.python2_updated_at.append(datetime.datetime.utcnow())
            complex.put()
        else:
            complex = ComplexProperty(id='python2',
                                      json={
                                          'key': 'string-value',
                                          'list':
                                          [1234567890, 3.141592, 'hello'],
                                          'dict': {
                                              'key': 'nested-value'
                                          }
                                      },
                                      pickle={
                                          'key': 'string-value',
                                          'list':
                                          [1234567890, 3.141592, 'hello'],
                                          'dict': {
                                              'key': 'nested-value'
                                          }
                                      })
            complex.put()

        self.response.write('\n-----\n')
        self.response.write('complex:\n')
        self.response.write(complex)

        embedded_key = ndb.Key('Embedded', 'python3')
        embedded = embedded_key.get()
        # if embedded:
        #     embedded.python2_updated_at.append(datetime.datetime.utcnow())
        #     embedded.put()
        #
        self.response.write('\n-----\n')
        self.response.write('embedded:\n')
        self.response.write(embedded)
示例#10
0
 def _to_base_type(self, value):
     #Takes the last part of the URL as the key
     return ndb.BlobKey(value.split('/')[-1])