Ejemplo n.º 1
0
    def get(self, request):

        if not request.user.is_authenticated():
            log.error('ParallelKeysHandler.read attempted with unauthenticated user.')
            return Response(status=status.HTTP_401_UNAUTHORIZED)

        mdts_ids = None
        docrule_id = request.GET.get('docrule', None)
        key_name = request.GET.get('key', None)
        autocomplete_req = request.GET.get('req', None)

        if not docrule_id:
            mdts_ids = request.GET.get('mdt_ids', None)
            if not mdts_ids:
                return Response([], status=status.HTTP_400_BAD_REQUEST)

        if (docrule_id or mdts_ids) and key_name and autocomplete_req:
            manager = MetaDataTemplateManager()
            if mdts_ids:
                doc_mdts = manager.get_mdts_by_name(mdts_ids)
            else:
                doc_mdts = manager.get_mdts_for_docrule(docrule_id)
            resp = process_pkeys_request(docrule_id, key_name, autocomplete_req, doc_mdts)
            return Response(resp)
        else:
            return Response(status=status.HTTP_404_NOT_FOUND)
Ejemplo n.º 2
0
def check_for_forbidden_new_keys_created(document_indexes, docrule, user):
    """Checks for user ability to add new key's value

    @param document_indexes is a set of user entered indexing data of specific document
    @param docrule is current docrule id
    @param user is a current request.user"""
    user_locked_keys = []
    mdts = get_mdts_for_docrule(docrule)
    manager = MetaDataTemplateManager()
    # Parsing MDT's
    admin_restricted_keys, locked_keys = manager.get_restricted_keys_names(mdts)
    # doing nothing for 'admincreate' keys if user has permissions or is superuser
    permit = False
    if user.groups.all():
        for group in user.groups.all():
            if group.name == SEC_GROUP_NAMES['edit_fixed_indexes']:
                permit = True
    if user.is_superuser or permit:
        admin_restricted_keys = []
    # Checking all keys locked for editing to staff or superuser only
    for key in admin_restricted_keys:
        value = document_indexes[key]
        exists = check_docs_for_existence(key, value, docrule)
        if not exists:
            user_locked_keys.append((key, 'adminlock'))
            # Checking all the keys that are marked locked
    for key in locked_keys:
        value = document_indexes[key]
        exists = check_docs_for_existence(key, value, docrule)
        if not exists:
            user_locked_keys.append((key, 'locked'))
    return user_locked_keys
Ejemplo n.º 3
0
    def read(self, request):

        if not request.user.is_authenticated():
            log.error('ParallelKeysHandler.read attempted with unauthenticated user.')
            return rc.FORBIDDEN

        mdts_ids = None
        docrule_id = request.GET.get('docrule', None)
        key_name = request.GET.get('key', None)
        autocomplete_req = request.GET.get('req', None)

        if not docrule_id:
            mdts_ids = request.GET.get('mdt_ids', None)
            if not mdts_ids:
                return rc.BAD_REQUEST

        if (docrule_id or mdts_ids) and key_name and autocomplete_req:
            manager = MetaDataTemplateManager()
            if mdts_ids:
                doc_mdts = manager.get_mdts_by_name(mdts_ids)
            else:
                doc_mdts = manager.get_mdts_for_docrule(docrule_id)
            resp = process_pkeys_request(docrule_id, key_name, autocomplete_req, doc_mdts)
            return resp
        else:
            return rc.NOT_FOUND
Ejemplo n.º 4
0
def check_for_forbidden_new_keys_created(document_indexes, docrule, user):
    """Checks for user ability to add new key's value

    @param document_indexes is a set of user entered indexing data of specific document
    @param docrule is current docrule id
    @param user is a current request.user"""
    user_locked_keys = []
    mdts = get_mdts_for_docrule(docrule)
    manager = MetaDataTemplateManager()
    # Parsing MDT's
    admin_restricted_keys, locked_keys = manager.get_restricted_keys_names(
        mdts)
    # doing nothing for 'admincreate' keys if user has permissions or is superuser
    permit = False
    if user.groups.all():
        for group in user.groups.all():
            if group.name == SEC_GROUP_NAMES['edit_fixed_indexes']:
                permit = True
    if user.is_superuser or permit:
        admin_restricted_keys = []
    # Checking all keys locked for editing to staff or superuser only
    for key in admin_restricted_keys:
        value = document_indexes[key]
        exists = check_docs_for_existence(key, value, docrule)
        if not exists:
            user_locked_keys.append((key, 'adminlock'))
            # Checking all the keys that are marked locked
    for key in locked_keys:
        value = document_indexes[key]
        exists = check_docs_for_existence(key, value, docrule)
        if not exists:
            user_locked_keys.append((key, 'locked'))
    return user_locked_keys
Ejemplo n.º 5
0
    def get(self, request):
        # Catch get with no payload
        docrule_id = request.GET.get('docrule_id', None)
        if not docrule_id:
            log.error(
                'MetaDataTemplateHandler.read attempted with no payload.')
            return Response([])

        log.debug('MetaDataTemplateHandler.read underway with docrule_id %s.' %
                  docrule_id)

        # Retrieve MDT from docrule_id
        manager = MetaDataTemplateManager()
        result = manager.get_mdts_for_docrule(docrule_id)

        log.debug('MetaDataTemplateHandler.read result: %s.' % result)

        if not result:
            log.error('MetaDataTemplateHandler.read error with docrule_id %s' %
                      docrule_id)
            return Response(status=status.HTTP_404_NOT_FOUND)

        log.info(
            'MetaDataTemplateHandler.read request fulfilled for docrule_id %s'
            % docrule_id)
        return Response(result, status=status.HTTP_200_OK)
Ejemplo n.º 6
0
    def get(self, request):

        if not request.user.is_authenticated():
            log.error(
                'ParallelKeysHandler.read attempted with unauthenticated user.'
            )
            return Response(status=status.HTTP_401_UNAUTHORIZED)

        mdts_ids = None
        docrule_id = request.GET.get('docrule', None)
        key_name = request.GET.get('key', None)
        autocomplete_req = request.GET.get('req', None)

        if not docrule_id:
            mdts_ids = request.GET.get('mdt_ids', None)
            if not mdts_ids:
                return Response([], status=status.HTTP_400_BAD_REQUEST)

        if (docrule_id or mdts_ids) and key_name and autocomplete_req:
            manager = MetaDataTemplateManager()
            if mdts_ids:
                doc_mdts = manager.get_mdts_by_name(mdts_ids)
            else:
                doc_mdts = manager.get_mdts_for_docrule(docrule_id)
            resp = process_pkeys_request(docrule_id, key_name,
                                         autocomplete_req, doc_mdts)
            return Response(resp)
        else:
            return Response(status=status.HTTP_404_NOT_FOUND)
Ejemplo n.º 7
0
    def read(self, request):
        if not request.user.is_authenticated():
            log.error('MetaDataTemplateHandler.read attempted with unauthenticated user.')
            return rc.FORBIDDEN

        # Catch get with no payload
        try:
            docrule_id = request.GET['docrule_id']  # FIXME: Need to standardize the arguments / nomenclature
        except KeyError:
            log.error('MetaDataTemplateHandler.read attempted with no payload.')
            if settings.DEBUG:
                raise
            else:
                return rc.BAD_REQUEST

        log.debug('MetaDataTemplateHandler.read underway with docrule_id %s.' % docrule_id)

        # Retrieve MDT from docrule_id
        manager = MetaDataTemplateManager()
        result = manager.get_mdts_for_docrule(docrule_id)

        log.debug('MetaDataTemplateHandler.read result: %s.' % result)

        if not result:
            log.error('MetaDataTemplateHandler.read error with docrule_id %s' % docrule_id)
            return rc.NOT_FOUND

        log.info('MetaDataTemplateHandler.read request fulfilled for docrule_id %s' % docrule_id)
        return result
Ejemplo n.º 8
0
    def handle(self, *args, **options):
        quiet = options.get('quiet', False)
        if not quiet:
            self.stdout.write("Export of DMS MDT's command called.\n")

        # Try and Fetch all mdts
        manager = MetaDataTemplateManager()
        mdts = manager.get_all_mdts()
        # Validating all OK
        if not mdts:
            if not quiet:
                self.stderr.write('DMS has no MDT-s.')
            return

        for mdt_link in mdts.itervalues():

            filename = mdt_link['mdt_id']
            mdt_instance = manager.get_mdts_by_name([filename, ])
            filename += '.json'
            file_obj = open(os.path.join(filename), 'w+')
            file_obj.seek(0)
            mdt_obj = mdt_instance['1']
            try:
                del mdt_obj["doc_type"]
            except KeyError:
                pass
            mdt_jsoned = json.dumps(mdt_obj, sort_keys=True, indent=4)
            file_obj.write(mdt_jsoned)
            if not quiet:
                self.stderr.write('Exported to file: %s\n'% filename)

        if not quiet:
            self.stdout.write("Exporting %s MDT's" % str(len(mdts)))
            self.stdout.write('\n')
Ejemplo n.º 9
0
 def get_keys_for_docrule(self, docrule_id, mdts = None):
     pkeys = {}
     mdt_manager = MetaDataTemplateManager()
     mdt_manager.docrule_id = docrule_id
     # valid Mdt id...
     if mdt_manager.mdt_read_call_valid():
         if not mdts:
             mdts = mdt_manager.get_mdts_for_docrule(docrule_id)
         pkeys = self.get_parallel_keys_for_mdts(mdts)
     return pkeys
Ejemplo n.º 10
0
 def get_keys_for_docrule(self, docrule_id, mdts = None):
     pkeys = {}
     mdt_manager = MetaDataTemplateManager()
     mdt_manager.docrule_id = docrule_id
     # valid Mdt id...
     if mdt_manager.mdt_read_call_valid():
         if not mdts:
             mdts = mdt_manager.get_mdts_for_docrule(docrule_id)
         pkeys = self.get_parallel_keys_for_mdts(mdts)
     return pkeys
Ejemplo n.º 11
0
def get_mdts_by_names(names_list):
    """
    Proxy for clean implementation

    Planned to be refactored out upon implementing something like search manager
    or uniting main system core with search logic.
    """
    manager = MetaDataTemplateManager()
    mdts = manager.get_mdts_by_name(names_list)
    return mdts
Ejemplo n.º 12
0
def get_mdts_by_names(names_list):
    """
    Proxy for clean implementation

    Planned to be refactored out upon implementing something like search manager
    or uniting main system core with search logic.
    """
    manager = MetaDataTemplateManager()
    mdts = manager.get_mdts_by_name(names_list)
    return mdts
Ejemplo n.º 13
0
    def handle(self, *args, **options):
        quiet = options.get('quiet', False)
        if not quiet:
            self.stdout.write('Trying to import MDT\n')
        if len(args) == 0:
            self.stdout.write('No MDT specified\n')
            return

        for mdt_file in args:
            cnt = 0
            # Checking for file
            if not os.path.exists(mdt_file):
                if not quiet:
                    self.stderr.write('Could not import %s: no such file\n' %
                                      mdt_file)
                continue

            file_obj = open(os.path.join(mdt_file))
            file_obj.seek(0)

            # Catch improper MDT payload
            try:
                mdt_data = json.load(file_obj)
            except ValueError, e:
                if not quiet:
                    self.stderr.write(
                        'MDT fail to create with bad json payload. %s\n' % e)
                continue
                pass

            # Try and validate MDT
            manager = MetaDataTemplateManager()
            if not manager.validate_mdt(mdt_data):
                if not quiet:
                    self.stderr.write(
                        'MDT %s fail to create. JSON did not validate.\n',
                        mdt_file)
                continue

            # Store MDT
            result = manager.store(mdt_data)
            if result is False:
                if not quiet:
                    self.stderr.write(
                        'MDT %s creation error occurred on storing process.\n',
                        mdt_file)
                continue

            if result and not quiet:
                self.stderr.write(str(result))
                self.stdout.write('\n')
            if result:
                cnt += 1
Ejemplo n.º 14
0
def check_for_secondary_keys_pairs(input_keys_list, docrule_id):
    """Checks for parallel keys pairs if they already exist in Secondary Keys.

    Scenario:
    Existing Parallell key:
        JOHN 1234
    user enters
        MIKE 1234
    where MIKE already exists in combination with another numeric id we should still issue a warning.
    EG. The combination of key values is new! (even though no new keys have been created)
    """
    # Copying dictionary data and operating with them in function
    sec_keys_list = {}
    suspicious_keys_list = {}
    if input_keys_list:
        for key in input_keys_list.iterkeys():
            sec_keys_list[key] = input_keys_list[key]
        suspicious_keys_list = {}
    p_keys_manager = ParallelKeysManager()
    mdt_manager = MetaDataTemplateManager()
    keys_list = [key for key in sec_keys_list.iterkeys()]
    # Cleaning from not secondary keys
    for key in keys_list:
        if key == 'date' or key == 'description':
            del sec_keys_list[key]
    # Getting list of parallel keys for this docrule.
    mdts = mdt_manager.get_mdts_for_docrule(docrule_id)
    pkeys = p_keys_manager.get_parallel_keys_for_mdts(mdts)
    # Getting Pkeys lists.
    checked_keys = []
    for key in sec_keys_list.iterkeys():
        key_pkeys = p_keys_manager.get_parallel_keys_for_key(pkeys, key)
        pkeys_with_values = p_keys_manager.get_parallel_keys_for_pkeys(
            key_pkeys, sec_keys_list)
        # Checking if this parallel keys group already was checked.
        if not pkeys_with_values in checked_keys:
            checked_keys.append(pkeys_with_values)
            # Getting all keys for parallel key to check if it exists in any document metadata already.
            for pkey, pvalue in pkeys_with_values:
                documents = CouchDocument.view('dmscouch/search_autocomplete',
                                               key=[docrule_id, pkey, pvalue],
                                               reduce=False)
                # Appending non existing keys into list to be checked.
                if not documents:
                    suspicious_keys_list[pkey] = pvalue
    if suspicious_keys_list:
        log.debug('Found new unique key/values in secondary keys: ',
                  suspicious_keys_list)
    else:
        log.debug('Found NO new unique key/values in secondary keys')
    return suspicious_keys_list
Ejemplo n.º 15
0
def check_for_secondary_keys_pairs(input_keys_list, docrule_id):
    """Checks for parallel keys pairs if they already exist in Secondary Keys.

    Scenario:
    Existing Parallell key:
        JOHN 1234
    user enters
        MIKE 1234
    where MIKE already exists in combination with another numeric id we should still issue a warning.
    EG. The combination of key values is new! (even though no new keys have been created)
    """
    # Copying dictionary data and operating with them in function
    sec_keys_list = {}
    suspicious_keys_list = {}
    if input_keys_list:
        for key in input_keys_list.iterkeys():
            sec_keys_list[key] = input_keys_list[key]
        suspicious_keys_list = {}
    p_keys_manager = ParallelKeysManager()
    mdt_manager = MetaDataTemplateManager()
    keys_list = [key for key in sec_keys_list.iterkeys()]
    # Cleaning from not secondary keys
    for key in keys_list:
        if key == 'date' or key == 'description':
            del sec_keys_list[key]
    # Getting list of parallel keys for this docrule.
    mdts = mdt_manager.get_mdts_for_docrule(docrule_id)
    pkeys = p_keys_manager.get_parallel_keys_for_mdts(mdts)
    # Getting Pkeys lists.
    checked_keys = []
    for key in sec_keys_list.iterkeys():
        key_pkeys = p_keys_manager.get_parallel_keys_for_key(pkeys, key)
        pkeys_with_values = p_keys_manager.get_parallel_keys_for_pkeys(key_pkeys, sec_keys_list)
        # Checking if this parallel keys group already was checked.
        if not pkeys_with_values in checked_keys:
            checked_keys.append(pkeys_with_values)
            # Getting all keys for parallel key to check if it exists in any document metadata already.
            for pkey, pvalue in pkeys_with_values:
                documents = CouchDocument.view('dmscouch/search_autocomplete',
                                                key=[docrule_id, pkey, pvalue],
                                                reduce=False)
                # Appending non existing keys into list to be checked.
                if not documents:
                    suspicious_keys_list[pkey] = pvalue
    if suspicious_keys_list:
        log.debug('Found new unique key/values in secondary keys: ', suspicious_keys_list)
    else:
        log.debug('Found NO new unique key/values in secondary keys')
    return suspicious_keys_list
Ejemplo n.º 16
0
def make_mdt_select_form(user=None, required=True):
    """
    Special method to construct custom MDTSearchSelectForm
    suggests MDT's for search that only restricted by user Docrule permissions.
    E.g.:
    'MDT1' is shown in MDTSearchSelectForm only if:
    'MDT1' has connected 'docrule1' AND 'user', that is provided to method,
    has permission to interact with this DocumentTypeRule ('docrule1' in our case).
    """
    # Fetching all mdts that have more than 1 docrule
    mdt_m = MetaDataTemplateManager()
    all_mdts = {}
    try:
        couch_mdts = mdt_m.get_all_mdts()
        # Filtering with more than 1 docrule count
        if couch_mdts:
            for mdt_id, mdt in couch_mdts.iteritems():
                mdt_docrules = mdt['docrule_id']
                if mdt_docrules.__len__() > 1:
                    all_mdts[mdt_id] = mdt
    except RequestError:
        # No CouchDB
        pass
    filtered_mdts = {}
    # Filtering MDT's displaying only permitted ones for provided user
    if not user.is_superuser and all_mdts:
        allowed_docrules_pks = list_permitted_docrules_pks(user)
        # Filtering all_mdts by only allowed ones
        for mdt in all_mdts:
            mdt_docrules = all_mdts[mdt]['docrule_id']
            for docrule_id in mdt_docrules:
                if docrule_id in allowed_docrules_pks:
                    filtered_mdts[mdt] = all_mdts[mdt]
    # listing mdts to display in form by number, mdt_id
    if filtered_mdts:
        mdt_choices = [(mdt, all_mdts[mdt]['mdt_id'])
                       for mdt in filtered_mdts.iterkeys()]
    else:
        mdts_list = [mdt for mdt in all_mdts.iterkeys()]
        mdt_choices = [(mdt, all_mdts[mdt]['mdt_id']) for mdt in mdts_list]
    mdt_choices.sort()

    # Constructing form
    class MDTSelectForm(forms.Form):
        mdt = forms.ChoiceField(choices=mdt_choices,
                                label=SEARCH_STRING_REPR['MDT_SEARCH'],
                                required=required)

    return MDTSelectForm
Ejemplo n.º 17
0
    def handle(self, *args, **options):
        quiet = options.get('quiet', False)
        if not quiet:
            self.stdout.write('Trying to import MDT\n')
        if len(args) == 0:
            self.stdout.write('No MDT specified\n')
            return

        for mdt_file in args:
            cnt = 0
            # Checking for file
            if not os.path.exists(mdt_file):
                if not quiet:
                    self.stderr.write('Could not import %s: no such file\n' % mdt_file)
                continue

            file_obj = open(os.path.join(mdt_file))
            file_obj.seek(0)

            # Catch improper MDT payload
            try:
                mdt_data = json.load(file_obj)
            except ValueError, e:
                if not quiet:
                    self.stderr.write('MDT fail to create with bad json payload. %s\n' % e)
                continue
                pass

            # Try and validate MDT
            manager = MetaDataTemplateManager()
            if not manager.validate_mdt(mdt_data):
                if not quiet:
                    self.stderr.write('MDT %s fail to create. JSON did not validate.\n', mdt_file)
                continue

            # Store MDT
            result = manager.store(mdt_data)
            if result is False:
                if not quiet:
                    self.stderr.write('MDT %s creation error occurred on storing process.\n', mdt_file)
                continue

            if result and not quiet:
                self.stderr.write(str(result))
                self.stdout.write('\n')
            if result:
                cnt += 1
Ejemplo n.º 18
0
def get_mdts_for_docrule(docrule_id):
    """
    Generates list of form fields for document.
    Uses MDT's for docrule to list form fields.
    """
    log.debug("Getting MDT's from CouchDB")
    if docrule_id.__class__.__name__ == 'int':
        docrule_id = str(docrule_id)
    mdt_manager = MetaDataTemplateManager()
    mdt_manager.docrule_id = docrule_id
    mdts_dict = mdt_manager.get_mdts_for_docrule(docrule_id)
    # there is at least 1 MDT exists
    if not mdts_dict=='error':
        log.debug("Got MDT's: %s" % mdts_dict)
    else:
        log.debug("No MDT's found")
    return mdts_dict
Ejemplo n.º 19
0
def make_mdt_select_form(user=None, required=True):
    """
    Special method to construct custom MDTSearchSelectForm
    suggests MDT's for search that only restricted by user Docrule permissions.
    E.g.:
    'MDT1' is shown in MDTSearchSelectForm only if:
    'MDT1' has connected 'docrule1' AND 'user', that is provided to method,
    has permission to interact with this DocumentTypeRule ('docrule1' in our case).
    """
    # Fetching all mdts that have more than 1 docrule
    mdt_m = MetaDataTemplateManager()
    all_mdts = {}
    try:
        couch_mdts = mdt_m.get_all_mdts()
        # Filtering with more than 1 docrule count
        if couch_mdts:
            for mdt_id, mdt in couch_mdts.iteritems():
                mdt_docrules = mdt['docrule_id']
                if mdt_docrules.__len__() > 1:
                    all_mdts[mdt_id] = mdt
    except RequestError:
        # No CouchDB
        pass
    filtered_mdts = {}
    # Filtering MDT's displaying only permitted ones for provided user
    if not user.is_superuser and all_mdts:
        allowed_docrules_pks = list_permitted_docrules_pks(user)
        # Filtering all_mdts by only allowed ones
        for mdt in all_mdts:
            mdt_docrules = all_mdts[mdt]['docrule_id']
            for docrule_id in mdt_docrules:
                if docrule_id in allowed_docrules_pks:
                    filtered_mdts[mdt] = all_mdts[mdt]
    # listing mdts to display in form by number, mdt_id
    if filtered_mdts:
        mdt_choices = [(mdt, all_mdts[mdt]['mdt_id']) for mdt in filtered_mdts.iterkeys()]
    else:
        mdts_list = [mdt for mdt in all_mdts.iterkeys()]
        mdt_choices = [(mdt, all_mdts[mdt]['mdt_id']) for mdt in mdts_list]
    mdt_choices.sort()

    # Constructing form
    class MDTSelectForm(forms.Form):
        mdt = forms.ChoiceField(choices=mdt_choices, label=SEARCH_STRING_REPR['MDT_SEARCH'], required=required)

    return MDTSelectForm
Ejemplo n.º 20
0
def get_mdts_for_docrule(docrule_id):
    """
    Generates list of form fields for document.
    Uses MDT's for docrule to list form fields.
    """
    log.debug("Getting MDT's from CouchDB")
    if docrule_id.__class__.__name__ == 'int':
        docrule_id = str(docrule_id)
    mdt_manager = MetaDataTemplateManager()
    mdt_manager.docrule_id = docrule_id
    mdts_dict = mdt_manager.get_mdts_for_docrule(docrule_id)
    # there is at least 1 MDT exists
    if not mdts_dict == 'error':
        log.debug("Got MDT's: %s" % mdts_dict)
    else:
        log.debug("No MDT's found")
    return mdts_dict
Ejemplo n.º 21
0
    def get(self, request):
        # Catch get with no payload
        docrule_id = request.GET.get('docrule_id', None)
        if not docrule_id:
            log.error('MetaDataTemplateHandler.read attempted with no payload.')
            return Response([])

        log.debug('MetaDataTemplateHandler.read underway with docrule_id %s.' % docrule_id)

        # Retrieve MDT from docrule_id
        manager = MetaDataTemplateManager()
        result = manager.get_mdts_for_docrule(docrule_id)

        log.debug('MetaDataTemplateHandler.read result: %s.' % result)

        if not result:
            log.error('MetaDataTemplateHandler.read error with docrule_id %s' % docrule_id)
            return Response(status=status.HTTP_404_NOT_FOUND)

        log.info('MetaDataTemplateHandler.read request fulfilled for docrule_id %s' % docrule_id)
        return Response(result, status=status.HTTP_200_OK)
Ejemplo n.º 22
0
class MetaDataTemplateHandler(APIView):
    """Read / Create / Delete Meta Data Templates

    @param docrule_id: is used for read
    @param mdt_id: is used for delete

    Example MDT:

    ::

        {
            "docrule_id": "used to assign this to document type rules",
            "description": "<-- description of this metadata template -->",
            "fields": {
                // examples:
                "<-- field number -->":
                     {
                       "type": "string|integer|date",
                       "length": "<--optional-->",
                       "field_name":"<-- field name used in UI -->",
                       "description": "<-- description used in UI -->"
                },
                "1": {
                       "type": "integer",
                       "field_name": "Employee ID",
                       "description": "Unique (Staff) ID of the person"
                },
                "2": {
                       "type": "string",
                       "length": 60,
                       "field_name": "Employee Name",
                       "description": "Name of the person associated with the document"
                }
            },
            // parallel fields mapping
            "parallel": {
                "<-- set id -->": ["<-- first 'field' -->", "<-- second 'field' -->"]
                "1": [ "1", "2"],
            }
        }


    """
    allowed_methods = ('GET', 'POST', 'DELETE')
    parser_classes = (FormParser, MultiPartParser)
    """

    """
    @method_decorator(logged_in_or_basicauth(AUTH_REALM))
    @method_decorator(group_required(API_GROUP_NAME)
                      )  # FIXME: Should be more granular permissions
    def post(self, request):
        # Catch post with no payload
        try:
            mdt = request.POST['mdt']
        except KeyError:
            log.error(
                'MetaDataTemplateHandler.create attempted with no payload.')
            if settings.DEBUG:
                raise
            else:
                return Response(status=status.HTTP_400_BAD_REQUEST)

        # Catch improper MDT payload
        try:
            data = json.loads(str(mdt))
        except ValueError, e:
            log.error(
                'MetaDataTemplateHandler.create attempted with bad json payload. %s'
                % e)
            if settings.DEBUG:
                raise
            else:
                return Response(status=status.HTTP_400_BAD_REQUEST)

        # Try and validate MDT
        manager = MetaDataTemplateManager()
        if not manager.validate_mdt(mdt):
            return Response(status=status.HTTP_400_BAD_REQUEST)

        # Store MDT
        result = manager.store(data)
        if result is False:
            log.error(
                'MetaDataTemplateHandler.create error occurred on store.')
            return Response(status=status.HTTP_409_CONFLICT)

        log.info('MetaDataTemplateHandler.create request fulfilled.')
        return Response(result, status=status.HTTP_200_OK)
Ejemplo n.º 23
0
            if body:
                try:
                    d = json.loads(body)
                    mdt_id = d['mdt_id']
                except:
                    log.error(
                        'MetaDataTemplateHandler.delete attempted with invalid request %s'
                        % body)
                    return Response(status=status.HTTP_400_BAD_REQUEST)

        # Catch mdt_id is None
        if mdt_id is None:
            return Response(status=status.HTTP_400_BAD_REQUEST)

        # Delete MDT via Manager
        manager = MetaDataTemplateManager()
        result = manager.delete_mdt(mdt_id)
        if result is True:
            log.info(
                'MetaDataTemplateHandler.delete request fulfilled for mdt_id %s'
                % mdt_id)
            return Response(status=status.HTTP_204_NO_CONTENT)
        else:
            log.info(
                'MetaDataTemplateHandler.delete request not found for mdt_id %s'
                % mdt_id)
            return Response(status=status.HTTP_404_NOT_FOUND)


@renderer_classes((JSONPRenderer, JSONRenderer))
class ParallelKeysHandler(APIView):
Ejemplo n.º 24
0
                raise
            else:
                return rc.BAD_REQUEST

        # Catch improper MDT payload
        try:
            data = json.loads(str(mdt))
        except ValueError, e:
            log.error('MetaDataTemplateHandler.create attempted with bad json payload. %s' % e)
            if settings.DEBUG:
                raise
            else:
                return rc.BAD_REQUEST

        # Try and validate MDT
        manager = MetaDataTemplateManager()
        if not manager.validate_mdt(mdt):
            return rc.BAD_REQUEST

        # Store MDT
        result = manager.store(data)
        if result is False:
            log.error('MetaDataTemplateHandler.create error occurred on store.')
            return rc.DUPLICATE_ENTRY

        log.info('MetaDataTemplateHandler.create request fulfilled.')
        return result

    @method_decorator(logged_in_or_basicauth(AUTH_REALM))
    @method_decorator(group_required('api')) # FIXME: Should be more granular permissions
    def read(self, request):
Ejemplo n.º 25
0
        try:
            mdt_id = request.REQUEST.get('mdt_id')
            log.info('MetaDataTemplateHandler.delete attempted with valid request %s' % mdt_id)
        except KeyError, e:
            log.error('MetaDataTemplateHandler.delete attempted with invalid request %s' % e)
            if settings.DEBUG:
                raise
            else:
                return rc.BAD_REQUEST

        # Catch mdt_id is None
        if mdt_id is None:
            return rc.BAD_REQUEST

        # Delete MDT via Manager
        manager = MetaDataTemplateManager()
        result = manager.delete_mdt(mdt_id)
        if result is True:
            log.info('MetaDataTemplateHandler.delete request fulfilled for mdt_id %s' % mdt_id)
            return rc.DELETED
        else:
            log.info('MetaDataTemplateHandler.delete request not found for mdt_id %s' % mdt_id)
            return rc.NOT_FOUND


class ParallelKeysHandler(BaseHandler):
    """Read parallel keys for autocomplete"""
    allowed_methods = ('GET', 'OPTIONS')

    """
    docrule is used for indexing