[Python-modules-commits] [python-pyld] 07/276: Added support for framing defaults.

Wolfgang Borgert debacle at moszumanska.debian.org
Wed Oct 8 23:47:48 UTC 2014


This is an automated email from the git hooks/post-receive script.

debacle pushed a commit to branch master
in repository python-pyld.

commit edaedfa8720e833e3f59f02c52f19742fe99417b
Author: Dave Longley <dlongley at digitalbazaar.com>
Date:   Fri Jul 29 14:28:31 2011 -0400

    Added support for framing defaults.
---
 lib/pyld/jsonld.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 46 insertions(+), 6 deletions(-)

diff --git a/lib/pyld/jsonld.py b/lib/pyld/jsonld.py
index 0d886b5..64381ad 100644
--- a/lib/pyld/jsonld.py
+++ b/lib/pyld/jsonld.py
@@ -365,7 +365,8 @@ def _expand(ctx, property, value, expandSubjects):
             rval = {}
             for key in value:
                 # preserve frame keywords
-                if key == '@embed' or key == '@explicit':
+                if (key == '@embed' or key == '@explicit' or
+                    key == '@default' or key == '@omitDefault'):
                     _setProperty(rval, key, copy.copy(value[key]))
                 elif key != '@context':
                     # set object to expanded property
@@ -1354,7 +1355,8 @@ class Processor:
             'defaults':
             {
                 'embedOn': True,
-                'explicitOn': False
+                'explicitOn': False,
+                'omitDefaultOn': False
             }
         }
 
@@ -1520,14 +1522,15 @@ def _frame(subjects, input, frame, embeds, options):
                 explicitOn = (frame['@explicit'] if '@explicit' in frame
                     else options['defaults']['explicitOn'])
                 if explicitOn:
+                    # FIXME: check this
                     # python - iterate over copy of list to remove key
                     for key in list(value):
-                        # always include subject
+                        # do not remove subject or any key in the frame
                         if key != _s and key not in frame:
                             del value[key]
 
                 # iterate over frame keys to do subframing
-                for key in frame:
+                for key, f in frame.items():
                     # skip keywords and type query
                     if key.find('@') != 0 and key != ns['rdf'] + 'type':
                         if key in value:
@@ -1540,11 +1543,48 @@ def _frame(subjects, input, frame, embeds, options):
                                     '@iri' in input[n] and
                                     input[n]['@iri'] in subjects):
                                     input[n] = subjects[input[n]['@iri']]
-                            value[key] = _frame(
-                                subjects, input, frame[key], embeds, options)
+                            result = _frame(subjects, input, f, embeds, options)
+                            if result is not None:
+                                value[key] = result
+                            elif omitOn:
+                                # omit is on, remove key
+                                del value[key]
+                            else:
+                                # use specified default from frame if available
+                                if isinstance(f, list):
+                                    f = f[0] if len(f) > 0 else {}
+                                    value[key] = (f['@default'] if
+                                        '@default' in f else None)
                         else:
                             # add None property to value
                             value[key] = None
+                        
+                        # handle setting default value(s)
+                        if key in value:
+                            # use first subframe if frame is an array
+                            if isinstance(f, list):
+                                f = f[0] if len(f) > 0 else {}
+                            
+                            # determine if omit default is on
+                            omitOn = (f['@omitDefault'] if
+                                '@omitDefault' in f
+                                else options['defaults']['omitDefaultOn']);
+                            
+                            if value[key] is None:
+                                if omitOn:
+                                    del value[key]
+                                elif '@default' in f:
+                                    value[key] = f['@default']
+                            elif isinstance(value[key], list):
+                                tmp = []
+                                for v in value[key]:
+                                    if v is None:
+                                        if omitOn:
+                                            tmp.append((f['@default'] if
+                                                '@default' in f else None))
+                                    else:
+                                        tmp.append(v)
+                                value[key] = tmp
 
             # add value to output
             if rval is None:

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/python-pyld.git



More information about the Python-modules-commits mailing list