replace windows line endings with unix format

Under python 3 the linter does not like line endings like \r\n so
replace them with \n.

Change-Id: Iaa401a7943a0df29b82482bc92451dca22ebc309
Signed-off-by: Doug Hellmann <doug@doughellmann.com>
This commit is contained in:
Doug Hellmann 2018-06-06 18:53:17 -04:00
parent c214c608e3
commit a432e30b87
3 changed files with 238 additions and 238 deletions

View File

@ -1,30 +1,30 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy
# of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
from zaqarclient.queues.v1 import client
client = client.Client('http://localhost:8888', conf={
'auth_opts': {
'options': {
'client_uuid': '355186cd-d1e8-4108-a3ac-a2183697232a',
'os_auth_token': '8444886dd9b04a1b87ddb502b508261c',
'os_auth_url': 'http://localhost:5000/v3.0/',
'os_project_id': '7530fad032ca431e9dc8ed4a5de5d99c'
}
}
}, version=2)
queue = client.queue('SampleQueue')
claim = queue.claim(ttl=600, grace=600) # refer to bug #1553387
for msg in claim:
print(msg)
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy
# of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
from zaqarclient.queues.v1 import client
client = client.Client('http://localhost:8888', conf={
'auth_opts': {
'options': {
'client_uuid': '355186cd-d1e8-4108-a3ac-a2183697232a',
'os_auth_token': '8444886dd9b04a1b87ddb502b508261c',
'os_auth_url': 'http://localhost:5000/v3.0/',
'os_project_id': '7530fad032ca431e9dc8ed4a5de5d99c'
}
}
}, version=2)
queue = client.queue('SampleQueue')
claim = queue.claim(ttl=600, grace=600) # refer to bug #1553387
for msg in claim:
print(msg)

View File

@ -1,27 +1,27 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy
# of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
from zaqarclient.queues.v1 import client
client = client.Client('http://localhost:8888', conf={
'auth_opts': {
'options': {
'client_uuid': '355186cd-d1e8-4108-a3ac-a2183697232a',
'os_auth_token': '8444886dd9b04a1b87ddb502b508261c',
'os_auth_url': 'http://localhost:5000/v3.0/',
'os_project_id': '7530fad032ca431e9dc8ed4a5de5d99c'
}
}
}, version=2)
queue = client.queue('SampleQueue')
queue.post([{'body': 'Zaqar Sample'}])
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy
# of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
from zaqarclient.queues.v1 import client
client = client.Client('http://localhost:8888', conf={
'auth_opts': {
'options': {
'client_uuid': '355186cd-d1e8-4108-a3ac-a2183697232a',
'os_auth_token': '8444886dd9b04a1b87ddb502b508261c',
'os_auth_url': 'http://localhost:5000/v3.0/',
'os_project_id': '7530fad032ca431e9dc8ed4a5de5d99c'
}
}
}, version=2)
queue = client.queue('SampleQueue')
queue.post([{'body': 'Zaqar Sample'}])

View File

@ -1,181 +1,181 @@
# Copyright (c) 2017 ZTE Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy
# of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
import functools
import msgpack
import redis
from zaqar.storage import base
from zaqar.storage import errors
from zaqar.storage.redis import utils
class FlavorsController(base.FlavorsBase):
"""Implements flavor resource operations using Redis.
Redis Data Structures:
1 All flavor_ids (Redis sorted set):
Set of all flavor_ids, ordered by name. Used to
delete the all records of table flavors
Key: flavors
+--------+-----------------------------+
| Id | Value |
+========+=============================+
| name | <flavor> |
+--------+-----------------------------+
2 Project Index (Redis sorted set):
Set of all flavors for the given project, ordered by name.
Key: <project_id>.flavors
+--------+-----------------------------+
| Id | Value |
+========+=============================+
| name | <flavor> |
+--------+-----------------------------+
3 Flavor Information (Redis hash):
Key: <flavor_id>.flavors
+----------------------+---------+
| Name | Field |
+======================+=========+
| flavor | f |
+----------------------+---------+
| project | p |
+----------------------+---------+
| capabilities | c |
+----------------------+---------+
"""
def __init__(self, *args, **kwargs):
super(FlavorsController, self).__init__(*args, **kwargs)
self._client = self.driver.connection
self._packer = msgpack.Packer(encoding='utf-8',
use_bin_type=True).pack
self._unpacker = functools.partial(msgpack.unpackb, encoding='utf-8')
@utils.raises_conn_error
def list(self, project=None, marker=None, limit=10, detailed=False):
client = self._client
subset_key = utils.flavor_project_subset_key(project)
marker_key = utils.flavor_name_hash_key(marker)
rank = client.zrank(subset_key, marker_key)
start = rank + 1 if rank is not None else 0
cursor = (f for f in client.zrange(subset_key, start,
start + limit - 1))
marker_next = {}
def normalizer(flavor):
marker_next['next'] = flavor['f']
return self._normalize(flavor, detailed=detailed)
yield utils.FlavorListCursor(self._client, cursor, normalizer)
yield marker_next and marker_next['next']
@utils.raises_conn_error
def get(self, name, project=None, detailed=False):
hash_key = utils.flavor_name_hash_key(name)
flavors = self._client.hgetall(hash_key)
if flavors is None or len(flavors) == 0:
raise errors.FlavorDoesNotExist(name)
return self._normalize(flavors, detailed)
@utils.raises_conn_error
def create(self, name, project=None, capabilities=None):
capabilities = {} if capabilities is None else capabilities
subset_key = utils.flavor_project_subset_key(project)
set_key = utils.flavor_set_key()
hash_key = utils.flavor_name_hash_key(name)
flavors = self._client.hgetall(hash_key)
if len(flavors) == 0:
flavors = {
'f': name,
'p': project,
'c': self._packer(capabilities or {}),
}
# Pipeline ensures atomic inserts.
with self._client.pipeline() as pipe:
pipe.zadd(set_key, 1, hash_key)
pipe.zadd(subset_key, 1, hash_key)
pipe.hmset(hash_key, flavors)
pipe.execute()
else:
with self._client.pipeline() as pipe:
pipe.hset(hash_key, "c", self._packer(capabilities))
pipe.hset(hash_key, "p", project)
pipe.execute()
@utils.raises_conn_error
def exists(self, name, project=None):
set_key = utils.flavor_set_key()
hash_key = utils.flavor_name_hash_key(name)
return self._client.zrank(set_key, hash_key) is not None
@utils.raises_conn_error
def update(self, name, project=None, capabilities=None):
hash_key = utils.flavor_name_hash_key(name)
with self._client.pipeline() as pipe:
pipe.hset(hash_key, "c", self._packer(capabilities))
pipe.hset(hash_key, "p", project)
try:
pipe.execute()
except redis.exceptions.ResponseError:
raise errors.FlavorDoesNotExist(name)
@utils.raises_conn_error
def delete(self, name, project=None):
subset_key = utils.flavor_project_subset_key(project)
set_key = utils.flavor_set_key()
hash_key = utils.flavor_name_hash_key(name)
if self._client.zrank(subset_key, hash_key) is not None:
with self._client.pipeline() as pipe:
pipe.zrem(set_key, hash_key)
pipe.zrem(subset_key, hash_key)
pipe.delete(hash_key)
pipe.execute()
@utils.raises_conn_error
def drop_all(self):
allflavor_key = self._client.keys(pattern='*flavors')
if len(allflavor_key) == 0:
return
with self._client.pipeline() as pipe:
for key in allflavor_key:
pipe.delete(key)
try:
pipe.execute()
except redis.exceptions.ResponseError:
return False
def _normalize(self, flavor, detailed=False):
ret = {
'name': flavor['f'],
}
if detailed:
ret['capabilities'] = self._unpacker(flavor['c'])
return ret
# Copyright (c) 2017 ZTE Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy
# of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
import functools
import msgpack
import redis
from zaqar.storage import base
from zaqar.storage import errors
from zaqar.storage.redis import utils
class FlavorsController(base.FlavorsBase):
"""Implements flavor resource operations using Redis.
Redis Data Structures:
1 All flavor_ids (Redis sorted set):
Set of all flavor_ids, ordered by name. Used to
delete the all records of table flavors
Key: flavors
+--------+-----------------------------+
| Id | Value |
+========+=============================+
| name | <flavor> |
+--------+-----------------------------+
2 Project Index (Redis sorted set):
Set of all flavors for the given project, ordered by name.
Key: <project_id>.flavors
+--------+-----------------------------+
| Id | Value |
+========+=============================+
| name | <flavor> |
+--------+-----------------------------+
3 Flavor Information (Redis hash):
Key: <flavor_id>.flavors
+----------------------+---------+
| Name | Field |
+======================+=========+
| flavor | f |
+----------------------+---------+
| project | p |
+----------------------+---------+
| capabilities | c |
+----------------------+---------+
"""
def __init__(self, *args, **kwargs):
super(FlavorsController, self).__init__(*args, **kwargs)
self._client = self.driver.connection
self._packer = msgpack.Packer(encoding='utf-8',
use_bin_type=True).pack
self._unpacker = functools.partial(msgpack.unpackb, encoding='utf-8')
@utils.raises_conn_error
def list(self, project=None, marker=None, limit=10, detailed=False):
client = self._client
subset_key = utils.flavor_project_subset_key(project)
marker_key = utils.flavor_name_hash_key(marker)
rank = client.zrank(subset_key, marker_key)
start = rank + 1 if rank is not None else 0
cursor = (f for f in client.zrange(subset_key, start,
start + limit - 1))
marker_next = {}
def normalizer(flavor):
marker_next['next'] = flavor['f']
return self._normalize(flavor, detailed=detailed)
yield utils.FlavorListCursor(self._client, cursor, normalizer)
yield marker_next and marker_next['next']
@utils.raises_conn_error
def get(self, name, project=None, detailed=False):
hash_key = utils.flavor_name_hash_key(name)
flavors = self._client.hgetall(hash_key)
if flavors is None or len(flavors) == 0:
raise errors.FlavorDoesNotExist(name)
return self._normalize(flavors, detailed)
@utils.raises_conn_error
def create(self, name, project=None, capabilities=None):
capabilities = {} if capabilities is None else capabilities
subset_key = utils.flavor_project_subset_key(project)
set_key = utils.flavor_set_key()
hash_key = utils.flavor_name_hash_key(name)
flavors = self._client.hgetall(hash_key)
if len(flavors) == 0:
flavors = {
'f': name,
'p': project,
'c': self._packer(capabilities or {}),
}
# Pipeline ensures atomic inserts.
with self._client.pipeline() as pipe:
pipe.zadd(set_key, 1, hash_key)
pipe.zadd(subset_key, 1, hash_key)
pipe.hmset(hash_key, flavors)
pipe.execute()
else:
with self._client.pipeline() as pipe:
pipe.hset(hash_key, "c", self._packer(capabilities))
pipe.hset(hash_key, "p", project)
pipe.execute()
@utils.raises_conn_error
def exists(self, name, project=None):
set_key = utils.flavor_set_key()
hash_key = utils.flavor_name_hash_key(name)
return self._client.zrank(set_key, hash_key) is not None
@utils.raises_conn_error
def update(self, name, project=None, capabilities=None):
hash_key = utils.flavor_name_hash_key(name)
with self._client.pipeline() as pipe:
pipe.hset(hash_key, "c", self._packer(capabilities))
pipe.hset(hash_key, "p", project)
try:
pipe.execute()
except redis.exceptions.ResponseError:
raise errors.FlavorDoesNotExist(name)
@utils.raises_conn_error
def delete(self, name, project=None):
subset_key = utils.flavor_project_subset_key(project)
set_key = utils.flavor_set_key()
hash_key = utils.flavor_name_hash_key(name)
if self._client.zrank(subset_key, hash_key) is not None:
with self._client.pipeline() as pipe:
pipe.zrem(set_key, hash_key)
pipe.zrem(subset_key, hash_key)
pipe.delete(hash_key)
pipe.execute()
@utils.raises_conn_error
def drop_all(self):
allflavor_key = self._client.keys(pattern='*flavors')
if len(allflavor_key) == 0:
return
with self._client.pipeline() as pipe:
for key in allflavor_key:
pipe.delete(key)
try:
pipe.execute()
except redis.exceptions.ResponseError:
return False
def _normalize(self, flavor, detailed=False):
ret = {
'name': flavor['f'],
}
if detailed:
ret['capabilities'] = self._unpacker(flavor['c'])
return ret