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
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
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))
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]
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
def to_model(Message, property, field, value): return ndb.BlobKey(value)
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))
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)
def _to_base_type(self, value): #Takes the last part of the URL as the key return ndb.BlobKey(value.split('/')[-1])