summaryrefslogtreecommitdiff
path: root/pycadf
diff options
context:
space:
mode:
authorgordon chung <gord@live.ca>2015-11-02 14:42:54 -0500
committergordon chung <gord@live.ca>2015-11-12 18:03:35 -0500
commit42b2926c0a96139799bab37db6db31bffec0a2a1 (patch)
treecbd753d235169381e54281e7ce0299a29982d9af /pycadf
parent3807cdab02981905111197ddde833e77e7915e81 (diff)
downloadpycadf-42b2926c0a96139799bab37db6db31bffec0a2a1.tar.gz
make generate_uuid return valid uuid
original design prepended a namespace to the beginning of uuid. this scoped the uuid to a namespace but it is technically invalid. this patch drops the behaviour of prepending string. rather, it takes the namespace, hashes it, and uses uuid v5 to generate valid uuid based on that namespace Change-Id: Ibde222c91522fa3c4a1720b6a8da81dac31560b9 Closes-Bug: #1504889
Diffstat (limited to 'pycadf')
-rw-r--r--pycadf/identifier.py34
1 files changed, 20 insertions, 14 deletions
diff --git a/pycadf/identifier.py b/pycadf/identifier.py
index de9e8eb..cb60627 100644
--- a/pycadf/identifier.py
+++ b/pycadf/identifier.py
@@ -11,11 +11,11 @@
# 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 hashlib
import uuid
+from debtcollector import removals
from oslo_config import cfg
-import six
CONF = cfg.CONF
opts = [
@@ -26,29 +26,35 @@ opts = [
CONF.register_opts(opts, group='audit')
-# TODO(mrutkows): make the namespace prefix configurable and have it resolve to
-# a full openstack namespace/domain value via some declaration (e.g.
-# "openstack:" == "http:\\www.openstack.org\")...
+AUDIT_NS = None
+if CONF.audit.namespace:
+ md5_hash = hashlib.md5(CONF.audit.namespace.encode('utf-8'))
+ AUDIT_NS = uuid.UUID(md5_hash.hexdigest())
+
+
def generate_uuid():
"""Generate a CADF identifier
"""
- return norm_ns(str(uuid.uuid4()))
+ if AUDIT_NS:
+ return str(uuid.uuid5(AUDIT_NS, str(uuid.uuid4())))
+ return str(uuid.uuid4())
+@removals.remove
def norm_ns(str_id):
- """Apply a namespace to the identifier
- """
+ """Apply a namespace to the identifier """
prefix = CONF.audit.namespace + ':' if CONF.audit.namespace else ''
return prefix + str_id
-# TODO(mrutkows): validate any cadf:Identifier (type) record against
-# CADF schema. This would include schema validation as an optional parm.
def is_valid(value):
"""Validation to ensure Identifier is correct.
"""
- if not isinstance(value, six.string_types):
- raise TypeError
- elif not value:
+ if value in ['target', 'initiator', 'observer']:
+ return True
+ try:
+ uuid.UUID(value)
+ except ValueError:
return False
- return True
+ else:
+ return True