def test_get_shelf_using_location_error(self): """Test getting a shelf with an invalid location.""" request = shelf_messages.ShelfRequest(location='Not_Valid') with self.assertRaisesRegexp( endpoints.NotFoundException, shelf_api._SHELF_DOES_NOT_EXIST_MSG % request.location): shelf_api.get_shelf(request)
def list_devices(self, request): """Lists all devices based on any device attribute.""" self.check_xsrf_token(self.request_state) if request.page_size <= 0: raise endpoints.BadRequestException( 'The value for page_size must be greater than 0.') query, sort_options, returned_fields = ( search_utils.set_search_query_options(request.query)) if not query: shelf_query = '' if request.shelf: shelf_urlsafe_key = request.shelf.shelf_request.urlsafe_key if not shelf_urlsafe_key: shelf_urlsafe_key = shelf_api.get_shelf( request.shelf.shelf_request).key.urlsafe() request.shelf = None shelf_query = ':'.join(('shelf', shelf_urlsafe_key)) query = search_utils.to_query(request, device_model.Device) query = ' '.join((query, shelf_query)) offset = search_utils.calculate_page_offset( page_size=request.page_size, page_number=request.page_number) search_results = device_model.Device.search( query_string=query, query_limit=request.page_size, offset=offset, sort_options=sort_options, returned_fields=returned_fields) total_pages = search_utils.calculate_total_pages( page_size=request.page_size, total_results=search_results.number_found) guest_permitted = config_model.Config.get('allow_guest_mode') messages = [] for document in search_results.results: message = search_utils.document_to_message( document, device_messages.Device()) message.guest_permitted = guest_permitted messages.append(message) return device_messages.ListDevicesResponse( devices=messages, total_results=search_results.number_found, total_pages=total_pages)
def list_devices(self, request): """Lists all devices based on any device attribute.""" self.check_xsrf_token(self.request_state) query, sort_options, returned_fields = ( search_utils.set_search_query_options(request.query)) if not query: shelf_query = '' if request.shelf: shelf_urlsafe_key = request.shelf.shelf_request.urlsafe_key if not shelf_urlsafe_key: shelf_urlsafe_key = shelf_api.get_shelf( request.shelf.shelf_request).key.urlsafe() request.shelf = None shelf_query = ':'.join(('shelf', shelf_urlsafe_key)) query = search_utils.to_query(request, device_model.Device) query = ' '.join((query, shelf_query)) cursor = search_utils.get_search_cursor(request.page_token) search_results = device_model.Device.search( query_string=query, query_limit=request.page_size, cursor=cursor, sort_options=sort_options, returned_fields=returned_fields) new_search_cursor = None if search_results.cursor: new_search_cursor = search_results.cursor.web_safe_string guest_permitted = config_model.Config.get('allow_guest_mode') messages = [] for document in search_results.results: message = search_utils.document_to_message( document, device_messages.Device()) message.guest_permitted = guest_permitted if message.current_ou == constants.ORG_UNIT_DICT['GUEST']: message.guest_enabled = True messages.append(message) return device_messages.ListDevicesResponse( devices=messages, has_additional_results=bool(new_search_cursor), page_token=new_search_cursor)
def list_devices(self, request): """Lists all devices based on any device attribute.""" self.check_xsrf_token(self.request_state) cursor = None if request.page_token: cursor = self.get_datastore_cursor( urlsafe_cursor=request.page_token) list_device_filters = self.to_dict(request, device_model.Device) if request.shelf and request.shelf.location: shelf = shelf_api.get_shelf(location=request.shelf.location) list_device_filters['shelf'] = shelf.key devices, next_cursor, additional_results = ( device_model.Device.list_devices(next_cursor=cursor, **list_device_filters)) device_messages = [] for device in devices: if device.shelf: shelf = device.shelf.get() shelf_message = _build_shelf_message(shelf) else: shelf_message = None last_reminder_message, next_reminder_message = ( _build_reminder_messages(device)) guest_enabled, max_extend_date, due_date, guest_permitted = ( get_loan_data(device)) del due_date # Unused device_messages.append( _build_device_message( device=device, shelf_message=shelf_message, last_reminder_message=last_reminder_message, next_reminder_message=next_reminder_message, guest_enabled=guest_enabled, max_extend_date=max_extend_date, guest_permitted=guest_permitted)) if next_cursor or additional_results: return device_message.ListDevicesResponse( devices=device_messages, additional_results=additional_results, page_token=next_cursor.urlsafe()) return device_message.ListDevicesResponse(devices=device_messages)
def list_devices(self, request): """Lists all devices based on any device attribute.""" self.check_xsrf_token(self.request_state) query, sort_options, returned_fields = ( search_utils.set_search_query_options(request.query)) if not query: shelf_query = '' if request.shelf: shelf_urlsafe_key = request.shelf.shelf_request.urlsafe_key if not shelf_urlsafe_key: shelf_urlsafe_key = shelf_api.get_shelf( request.shelf.shelf_request).key.urlsafe() request.shelf = None shelf_query = ':'.join(('shelf', shelf_urlsafe_key)) query = search_utils.to_query(request, device_model.Device) query = ' '.join((query, shelf_query)) cursor = search_utils.get_search_cursor(request.page_token) search_results = device_model.Device.search( query_string=query, query_limit=request.page_size, cursor=cursor, sort_options=sort_options, returned_fields=returned_fields) new_search_cursor = None if search_results.cursor: new_search_cursor = search_results.cursor.web_safe_string guest_permitted = config_model.Config.get('allow_guest_mode') messages = [] for document in search_results.results: device = api_utils.get_ndb_key(document.doc_id).get() messages.append( api_utils.build_device_message_from_model(device, guest_permitted)) return device_message.ListDevicesResponse( devices=messages, additional_results=bool(new_search_cursor), page_token=new_search_cursor)
def test_get_shelf_using_location(self): """Test getting a shelf using the location.""" request = shelf_messages.ShelfRequest(location=self.shelf.location) shelf = shelf_api.get_shelf(request) self.assertEqual(shelf, self.shelf)
def test_get_shelf_urlsafe_key(self): """Test getting a shelf using the urlsafe key.""" request = shelf_messages.ShelfRequest( urlsafe_key=self.shelf.key.urlsafe()) shelf = shelf_api.get_shelf(request) self.assertEqual(shelf, self.shelf)
def test_get_shelf_using_location_error(self): location = 'Not_Valid' with self.assertRaisesRegexp( endpoints.NotFoundException, shelf_api._SHELF_DOES_NOT_EXIST_MSG % location): shelf_api.get_shelf(location=location)
def test_get_shelf_using_location(self): location = self.shelf.location shelf = shelf_api.get_shelf(location=location) self.assertEqual(shelf, self.shelf)