Beispiel #1
0
    def create(cls, uid, value, check_sum=None, processes=list()):
        """
        Creates, processes and returns a record
        :param uid: str
        :param value: str
        :param check_sum: str
        :param processes: list
        :return: object
        """
        record = dict()
        record['uid'] = uid
        record['value'] = value
        record['timestamp'] = time.time()

        if not check_sum:
            check_sum = Helpers.sign(value)

        record['check_sum'] = check_sum

        for process in processes:
            process.process(record)

        record['size'] = Helpers.iterable_size(target=record)

        return record
Beispiel #2
0
 def _put_job(self, url, dirs, params, data):
     """Puts result data job
     """
     Helpers.request_put(url=url,
                         dirs=dirs,
                         data=data,
                         params=params)
Beispiel #3
0
    def test_put_exists(self):
        self.start_simple_server()
        first_content = self.sample_fixed['value']
        second_content = 'New content.'

        response = Helpers.request_post(
            url=URL,
            dirs=['text', self.sample_fixed['uid']],
            data={'value': first_content})

        self.assertEqual(response.status_code, 200, 'First post failed')

        first_len = len(response.content)
        difference = len(second_content) - len(first_content)
        expected_second_len = first_len + difference

        response = Helpers.request_put(
            url=URL,
            dirs=['text', self.sample_fixed['uid']],
            data={'value': 'New content.'})

        self.assertEqual(response.status_code, 200, 'Put failed')

        second_len = len(response.content)

        second_len -= 1     # Due to optional negative sign on check_sum

        self.assertLessEqual(second_len, expected_second_len)

        response = Helpers.request_delete(
            url=URL,
            dirs=['text', self.sample_fixed['uid']])

        self.assertEqual(response.status_code, 200, 'Delete failed')
Beispiel #4
0
    def test_post_new(self):
        self.start_simple_server()
        uid = self.new_uid()
        response = Helpers.request_post(
            url=URL,
            dirs=['text', uid],
            data={'value': self.sample_normal['value']})
        self.assertEqual(response.status_code, 200, 'Post failed')

        response = Helpers.request_delete(
            url=URL,
            dirs=['text', uid])

        self.assertEqual(response.status_code, 200, 'Delete failed')
Beispiel #5
0
    def _bounce_delete_job(self, url, uid, params=None):
        """
        Requests a delete job given an url, uid and value, and optionally a
        get url parameters.

        Returns False if response code is not 200.

        :param url: str
        :param uid: str
        :param params: dict
        :return: bool
        """
        response = Helpers.request_delete(
            url=url,
            dirs=[uid],
            params=params,
        )

        if response.status_code != 200:
            return False

        try:
            self._cache.forget(uid=uid)

        finally:
            return True
Beispiel #6
0
    def _bounce_post_job(self, url, uid, value, to_cache=False, params=None):
        """
        Requests a post job given an url, uid and value, and optionally a
        get url parameters.

        Optionally inserts the record into cache.

        Returns False if response code is not 200. Converts the response
        content into a valid record if possible and returns the record on
        success.

        :param url: str
        :param uid: str
        :param value: str
        :param to_cache: bool. If True records the response into cache.
        :param params: dict
        :return: dict
        """
        response = Helpers.request_post(
            url=url,
            dirs=[uid],
            data={'value': value},
            params=params,
        )

        record = RecordHelper.str2record(content=response.content)

        if response.status_code != 200 or not record:
            return False

        if to_cache:
            self._cache.put(record)

        return record
Beispiel #7
0
    def update(self, uid, values):
        """
        Updates a record. Raises an exception if record exists
        :param uid: str
        :param values: dict
        :return: dict
        """
        text = values['value']

        self._valid_exists(uid=uid)

        last_check_sum = self.get_check_sum(uid=uid)

        new_check_sum = Helpers.sign(text)

        if last_check_sum == new_check_sum:
            raise RecordExists('Record has no change')

        record = self.create(uid=uid,
                             value=text,
                             check_sum=new_check_sum,
                             processes=self._processes)

        self._storage.update(record=record)

        return record
Beispiel #8
0
    def test_delete_not_exists_error(self):
        self.start_simple_server()
        response = Helpers.request_delete(
            url=URL,
            dirs=['text', self.new_uid()])

        self.assertEqual(response.status_code, 404)
Beispiel #9
0
    def test_put_not_exists_error(self):
        self.start_simple_server()
        response = Helpers.request_put(
            url=URL,
            dirs=['text', self.new_uid()],
            data={'value': 'dummy content'})

        self.assertEqual(response.status_code, 404)
Beispiel #10
0
    def _remove_file_by_uid(self, uid):
        """
        Removes the file
        :param uid: str
        """
        file_path = self.__format_filename(filename=uid,
                                           base_path=self._base_path)

        return Helpers.delete_file(file_path=file_path)
Beispiel #11
0
    def _remove_file_by_uid(self, uid):
        """
        Removes the file
        :param uid: str
        """
        file_path = self.__format_filename(filename=uid,
                                           base_path=self._base_path)

        return Helpers.delete_file(file_path=file_path)
Beispiel #12
0
    def exists(self, uid):
        """
        Checks if a record exists and returns True or False.
        :param uid: str
        :return: bool
        """
        file_path = self.__format_filename(filename=uid,
                                           base_path=self._base_path)

        return Helpers.path_exists(file_path)
Beispiel #13
0
    def exists(self, uid):
        """
        Checks if a record exists and returns True or False.
        :param uid: str
        :return: bool
        """
        file_path = self.__format_filename(filename=uid,
                                           base_path=self._base_path)

        return Helpers.path_exists(file_path)
Beispiel #14
0
    def test_get_exists(self):
        self.start_simple_server()
        uid = self.sample_fixed_len['uid']
        expected_len = 158
        response = Helpers.request_post(
            url=URL,
            dirs=['text', uid],
            data={'value': self.sample_fixed_len['value']})
        self.assertEqual(response.status_code, 200, 'Post failed')

        response = Helpers.request_get(
            url=URL,
            dirs=['text', uid])

        self.assertEqual(response.status_code, 200, 'Get failed')
        self.assertEqual(len(response.content), expected_len)

        response = Helpers.request_delete(
            url=URL,
            dirs=['text', uid])

        self.assertEqual(response.status_code, 200, 'Delete failed')
Beispiel #15
0
    def _bounce_get_job(cls, url, uid, params=None):
        """
        Requests a get job given an url and uid, and optionally a set of url
        parameters.

        Returns False if response code is not 200. Converts the response
        content into a valid record if possible and returns the record on
        success.

        :param url: str
        :param uid: str
        :param params: dict
        :return: dict
        """
        response = Helpers.request_get(url=url, dirs=[uid], params=params)

        record = RecordHelper.str2record(content=response.content)

        if response.status_code != 200 or not record:
            return False

        return record
Beispiel #16
0
    def _delete_job(self, url, dirs, params):
        Helpers.request_delete(url=url, dirs=dirs, params=params)

        uid = dirs[-1]
        self._cache.forget(uid=uid)
Beispiel #17
0
    def triple_server_common(self, route_key):
        self.start_triple_server(key=route_key)

        uid = self.sample_fixed['uid']
        value = self.sample_fixed['value']
        response = Helpers.request_post(
            url=URL1,
            dirs=['text', uid],
            data={'value': value})
        self.assertEqual(response.status_code, 200)

        time.sleep(10)

        record1 = self.get_record_by_path(
            'test-sandbox/{key}/{key}1/{uid}'.format(key=route_key, uid=uid)
        )
        record2 = self.get_record_by_path(
            'test-sandbox/{key}/{key}2/{uid}'.format(key=route_key, uid=uid)
        )
        record3 = self.get_record_by_path(
            'test-sandbox/{key}/{key}3/{uid}'.format(key=route_key, uid=uid)
        )

        self.assertEqual(record1, record2, 'POST: Record 1 and 2')
        self.assertEqual(record2, record3, 'POST: Record 2 and 3')
        self.assertEqual(record1['uid'], uid, 'POST: Unexpected uid')

        value = 'I have changed the content on first and {!s} site too.'\
            .format(route_key)

        response = Helpers.request_put(
            url=URL1,
            dirs=['text', uid],
            data={'value': value})
        self.assertEqual(response.status_code, 200)

        response_record = self.get_record_by_response_content(response.content)

        self.assertEqual(response_record['value'][0:20], value[0:20])

        time.sleep(10)

        record1 = self.get_record_by_path(
            'test-sandbox/{key}/{key}1/{uid}'.format(key=route_key, uid=uid)
        )
        record2 = self.get_record_by_path(
            'test-sandbox/{key}/{key}2/{uid}'.format(key=route_key, uid=uid)
        )
        record3 = self.get_record_by_path(
            'test-sandbox/{key}/{key}3/{uid}'.format(key=route_key, uid=uid)
        )

        self.assertEqual(record1, record2, 'PUT: Record 1 and 2')
        self.assertEqual(record2, record3, 'PUT: Record 2 and 3')
        self.assertEqual(record1['uid'], uid, 'PUT: Unexpected uid')

        response = Helpers.request_delete(
            url=URL1,
            dirs=['text', uid])

        self.assertEqual(response.status_code, 200)

        time.sleep(10)

        exists1 = Helpers.path_exists(
            'test-sandbox/{key}/{key}1/{uid}'.format(key=route_key, uid=uid)
        )
        exists2 = Helpers.path_exists(
            'test-sandbox/{key}/{key}2/{uid}'.format(key=route_key, uid=uid)
        )
        exists3 = Helpers.path_exists(
            'test-sandbox/{key}/{key}3/{uid}'.format(key=route_key, uid=uid)
        )

        self.assertFalse(exists1)
        self.assertFalse(exists2)
        self.assertFalse(exists3)

        self.stop_all_apis()
Beispiel #18
0
    def triple_server_inequable(self, route_key):
        self.start_triple_server(key=route_key)

        uid = self.sample_fixed['uid']
        value = self.sample_fixed['value']
        response = Helpers.request_post(
            url=URL1,
            dirs=['text', uid],
            data={'value': value})
        self.assertEqual(response.status_code, 200)

        time.sleep(10)

        Helpers.delete_file(
            file_path='test-sandbox/{key}/{key}1/{uid}'.format(key=route_key,
                                                               uid=uid)
        )

        exists1 = Helpers.path_exists(
            'test-sandbox/{key}/{key}1/{uid}'.format(key=route_key, uid=uid)
        )

        self.assertFalse(exists1, 'Record 1 still exists')

        record2 = self.get_record_by_path(
            'test-sandbox/{key}/{key}2/{uid}'.format(key=route_key, uid=uid)
        )
        record3 = self.get_record_by_path(
            'test-sandbox/{key}/{key}3/{uid}'.format(key=route_key, uid=uid)
        )

        self.assertEqual(record2, record3, 'POST: Record 2 and 3')
        self.assertEqual(record2['uid'], uid, 'POST: Unexpected uid')

        response = Helpers.request_get(
            url=URL1,
            dirs=['text', uid])

        self.assertEqual(response.status_code, 200, 'Get failed')

        record1 = RecordHelper.str2record(content=response.content)

        self.assertEqual(record1, record2, 'POST: Record 1 and 2')

        response = Helpers.request_delete(
            url=URL1,
            dirs=['text', uid])

        self.assertEqual(response.status_code, 200)

        time.sleep(10)

        exists1 = Helpers.path_exists(
            'test-sandbox/{key}/{key}1/{uid}'.format(key=route_key, uid=uid)
        )
        exists2 = Helpers.path_exists(
            'test-sandbox/{key}/{key}2/{uid}'.format(key=route_key, uid=uid)
        )
        exists3 = Helpers.path_exists(
            'test-sandbox/{key}/{key}3/{uid}'.format(key=route_key, uid=uid)
        )

        self.assertFalse(exists1)
        self.assertFalse(exists2)
        self.assertFalse(exists3)

        self.stop_all_apis()
Beispiel #19
0
    def test_cache(self):
        route_key = 'cache'
        self.start_triple_server(key=route_key)

        uid = self.sample_fixed['uid']
        value = self.sample_fixed['value']
        response = Helpers.request_post(
            url=URL1,
            dirs=['text', uid],
            data={'value': value},
            params={CACHE_MODE: int(True)},
        )
        self.assertEqual(response.status_code, 200)

        time.sleep(10)

        self.assertRaises(IOError,
                          self.get_record_by_path,
                          'test-sandbox/{key}/{key}1/{uid}'.format(
                              key=route_key,
                              uid=uid
                          ))

        record2 = self.get_record_by_path(
            'test-sandbox/{key}/{key}2/{uid}'.format(key=route_key, uid=uid)
        )
        record3 = self.get_record_by_path(
            'test-sandbox/{key}/{key}3/{uid}'.format(key=route_key, uid=uid)
        )

        self.assertNotEqual(record2, record3, 'POST: Record 2 and 3 are equal')
        self.assertEqual(record2['value'], record3['value'],
                         'POST: Record 2 and 3 different values')
        self.assertEqual(record2['uid'], uid, 'POST: Unexpected uid')

        value = 'I have changed the content on first and {!s} site too.'\
            .format(route_key)

        response = Helpers.request_put(
            url=URL1,
            dirs=['text', uid],
            data={'value': value},
            params={CACHE_MODE: int(True)},
        )
        self.assertEqual(response.status_code, 200)

        response_record = self.get_record_by_response_content(response.content)

        self.assertEqual(response_record['value'][0:20], value[0:20])

        time.sleep(10)

        self.assertRaises(IOError,
                          self.get_record_by_path,
                          'test-sandbox/{key}/{key}1/{uid}'.format(
                              key=route_key,
                              uid=uid
                          ))

        record2 = self.get_record_by_path(
            'test-sandbox/{key}/{key}2/{uid}'.format(key=route_key, uid=uid)
        )
        record3 = self.get_record_by_path(
            'test-sandbox/{key}/{key}3/{uid}'.format(key=route_key, uid=uid)
        )

        self.assertNotEqual(record2, record3, 'PUT: Record 2 and 3 are equal')
        self.assertEqual(record2['value'], record3['value'],
                         'PUT: Record 2 and 3 different values')
        self.assertEqual(record2['uid'], uid, 'PUT: Unexpected uid')

        response = Helpers.request_delete(
            url=URL1,
            dirs=['text', uid],
            params={CACHE_MODE: int(True)},
        )

        self.assertEqual(response.status_code, 200)

        time.sleep(10)

        exists1 = Helpers.path_exists(
            'test-sandbox/{key}/{key}1/{uid}'.format(key=route_key, uid=uid)
        )
        exists2 = Helpers.path_exists(
            'test-sandbox/{key}/{key}2/{uid}'.format(key=route_key, uid=uid)
        )
        exists3 = Helpers.path_exists(
            'test-sandbox/{key}/{key}3/{uid}'.format(key=route_key, uid=uid)
        )

        self.assertFalse(exists1)
        self.assertFalse(exists2)
        self.assertFalse(exists3)

        self.stop_all_apis()
Beispiel #20
0
    if len(sys.argv) < 3:
        print AboutHelper.help_info(default_port=DEFAULT_PORT)
        exit(1)

    servers_list_path = sys.argv[1]

    if servers_list_path == '-h' or servers_list_path == '--help':
        print AboutHelper.help_info(default_port=DEFAULT_PORT)
        exit(1)

    base_path = sys.argv[2]

    try:
        port = int(sys.argv[3])

    except IndexError:
        port = DEFAULT_PORT

    if not Helpers.path_exists(servers_list_path):
        print "Error: provided SERVERS_LIST_PATH is not a valid path.\n"
        print "See --help for more information.\n"
        exit(1)

    if not Helpers.path_exists(base_path):
        print "Error: provided BASE_PATH is not a valid path.\n"
        print "See --help for more information.\n"
        exit(1)

    print "Running on port {:d}".format(port)
    make_server('', port, app).serve_forever()
Beispiel #21
0
    if len(sys.argv) < 3:
        print AboutHelper.help_info(default_port=DEFAULT_PORT)
        exit(1)

    servers_list_path = sys.argv[1]

    if servers_list_path == '-h' or servers_list_path == '--help':
        print AboutHelper.help_info(default_port=DEFAULT_PORT)
        exit(1)

    base_path = sys.argv[2]

    try:
        port = int(sys.argv[3])

    except IndexError:
        port = DEFAULT_PORT

    if not Helpers.path_exists(servers_list_path):
        print "Error: provided SERVERS_LIST_PATH is not a valid path.\n"
        print "See --help for more information.\n"
        exit(1)

    if not Helpers.path_exists(base_path):
        print "Error: provided BASE_PATH is not a valid path.\n"
        print "See --help for more information.\n"
        exit(1)

    print "Running on port {:d}".format(port)
    make_server('', port, app).serve_forever()