Пример #1
0
 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)
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
 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)
Пример #5
0
  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)
Пример #6
0
 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)
Пример #7
0
 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)
Пример #8
0
 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)
Пример #9
0
 def test_get_shelf_using_location(self):
     location = self.shelf.location
     shelf = shelf_api.get_shelf(location=location)
     self.assertEqual(shelf, self.shelf)