Esempio n. 1
0
    def delete(cls, user, record):
        """Delete permission check.

        :param user: Logged user.
        :param recor: Record to check.
        :returns: True is action can be done.
        """
        # At least for admin logged users.
        if not current_user_record or not current_user_record.is_admin:
            return False

        # Superuser is allowed
        if current_user_record.is_superuser:
            return True

        # Cannot delete himself
        if current_user_record['pid'] == record['pid']:
            return False

        if not record.get('organisation'):
            return False

        # For admin read is only for logged user organisation
        if record['organisation'].get('$ref'):
            return current_organisation[
                'pid'] == OrganisationRecord.get_pid_by_ref_link(
                    record['organisation']['$ref'])

        return current_organisation['pid'] == record['organisation']['pid']
Esempio n. 2
0
def get_organisations(record):
    """Get list of organisations with full data.

    :param record: Record object.
    """
    organisations = []
    for organisation in record.get('organisation', []):
        organisation_pid = OrganisationRecord.get_pid_by_ref_link(
            organisation['$ref']) if organisation.get(
                '$ref') else organisation['pid']
        organisations.append(
            OrganisationRecord.get_record_by_pid(organisation_pid))

    return organisations
Esempio n. 3
0
def populate_files_properties(record):
    """Add restriction, link and thumbnail to file.

    :param record: Record object
    :param file: File dict
    """
    # Load organisation for the record
    organisation_pid = OrganisationRecord.get_pid_by_ref_link(
        record['organisation']['$ref']) if record['organisation'].get(
            '$ref') else record['organisation']['pid']
    organisation = OrganisationRecord.get_record_by_pid(organisation_pid)

    for file in record['_files']:
        if file.get('type') == 'file':
            file['restriction'] = get_file_restriction(file, organisation)
            file['thumbnail'] = get_thumbnail(file, record)
            file['links'] = get_file_links(file, record)
Esempio n. 4
0
def marc21_to_specific_collection(self, key, value):
    """Extract collection for record."""
    if not value.get('a'):
        return None

    # No organisation found, the collection is not imported.
    if not self.get('organisation'):
        return None

    organisation_pid = OrganisationRecord.get_pid_by_ref_link(
        self['organisation'][0]['$ref'])

    hash_key = hashlib.md5(
        (value.get('a') + organisation_pid).encode()).hexdigest()

    collection_pid = CollectionRecord.get_pid_by_hash_key(hash_key)

    # No collection found
    if not collection_pid:
        collection = CollectionRecord.create({
            'name': [{
                'language': 'eng',
                'value': value.get('a')
            }],
            'organisation': {
                '$ref': self['organisation'][0]['$ref']
            },
            'hashKey':
            hash_key
        })
        collection.commit()
        collection.reindex()
        db.session.commit()
        collection_pid = collection['pid']

    return {
        '$ref': CollectionRecord.get_ref_link('collections', collection_pid)
    }