Exemple #1
0
def list_entries(options):
    """List pending entries"""
    approved = options.approved
    task_name = options.task_name

    with Session() as session:
        entries = plugin_pending_approval.list_pending_entries(
            session=session, task_name=task_name, approved=approved)
        header = ['#', 'Task Name', 'Title', 'URL', 'Approved', 'Added']
        table_data = [header]
        for entry in entries:
            table_data.append([
                entry.id,
                entry.task_name,
                entry.title,
                entry.url,
                colorize('green', 'Yes') if entry.approved else 'No',
                entry.added.strftime("%c"),
            ])
    try:
        table = TerminalTable(options.table_type,
                              table_data,
                              wrap_columns=[1, 2, 3],
                              drop_columns=[5, 1, 3])
        console(table.output)
    except TerminalTableError as e:
        console('ERROR: %s' % str(e))
Exemple #2
0
def manage_entries(options, selection, approved):
    """Manage pending entries"""
    approved_text = 'approved' if approved else 'pending'
    with Session() as session:
        if selection == 'all':
            entries = plugin_pending_approval.list_pending_entries(
                session=session, approved=not approved)
        else:
            try:
                entry = plugin_pending_approval.get_entry_by_id(
                    session, selection)
                if entry.approved is approved:
                    console(
                        colorize('red', 'ERROR: ') +
                        'Entry with ID %s is already %s' %
                        (entry.id, approved_text))
                    sys.exit(1)
            except NoResultFound:
                console('Pending entry with ID %s does not exist' % selection)
                sys.exit(1)
            else:
                entries = [entry]
        if not entries:
            console('All entries are already %s' % approved_text)
            return
        for entry in entries:
            if entry.approved is not approved:
                console('Setting pending entry with ID %s status to %s' %
                        (entry.id, approved_text))
                entry.approved = approved
Exemple #3
0
    def put(self, session=None):
        """Approve/Reject the status of pending entries"""
        args = filter_parser.parse_args()

        data = request.json
        approved = data['operation'] == 'approve'
        task_name = args.get('task_name')

        pending_entries = []
        for entry in list_pending_entries(session, task_name=task_name):
            if entry.approved is not approved:
                entry.approved = approved
                pending_entries.append(entry.to_dict())

        rsp = jsonify(pending_entries)
        rsp.status_code = 201 if pending_entries else 204
        return rsp
Exemple #4
0
    def put(self, session=None):
        """Approve/Reject the status of pending entries"""
        args = filter_parser.parse_args()

        data = request.json
        approved = data["operation"] == "approve"
        task_name = args.get("task_name")

        pending_entries = []
        for entry in list_pending_entries(session, task_name=task_name):
            if entry.approved is not approved:
                entry.approved = approved
                pending_entries.append(entry.to_dict())

        rsp = jsonify(pending_entries)
        rsp.status_code = 201 if pending_entries else 204
        return rsp
Exemple #5
0
def list_entries(options):
    """List pending entries"""
    approved = options.approved
    task_name = options.task_name

    with Session() as session:
        entries = list_pending_entries(session=session, task_name=task_name, approved=approved)
        header = ['#', 'Task Name', 'Title', 'URL', 'Approved', 'Added']
        table_data = [header]
        for entry in entries:
            table_data.append([
                entry.id,
                entry.task_name,
                entry.title,
                entry.url,
                colorize('green', 'Yes') if entry.approved else 'No',
                entry.added.strftime("%c"),
            ])
    try:
        table = TerminalTable(options.table_type, table_data, wrap_columns=[1, 2, 3], drop_columns=[5, 1, 3])
        console(table.output)
    except TerminalTableError as e:
        console('ERROR: %s' % str(e))
Exemple #6
0
def manage_entries(options, selection, approved):
    """Manage pending entries"""
    approved_text = 'approved' if approved else 'pending'
    with Session() as session:
        if selection == 'all':
            entries = list_pending_entries(session=session, approved=not approved)
        else:
            try:
                entry = get_entry_by_id(session, selection)
                if entry.approved is approved:
                    console(colorize('red', 'ERROR: ') + 'Entry with ID %s is already %s' % (entry.id, approved_text))
                    sys.exit(1)
            except NoResultFound:
                console('Pending entry with ID %s does not exist' % selection)
                sys.exit(1)
            else:
                entries = [entry]
        if not entries:
            console('All entries are already %s' % approved_text)
            return
        for entry in entries:
            if entry.approved is not approved:
                console('Setting pending entry with ID %s status to %s' % (entry.id, approved_text))
                entry.approved = approved
Exemple #7
0
    def get(self, session=None):
        """List all pending entries"""
        args = pending_parser.parse_args()

        # Filter params
        task_name = args.get('task_name')
        approved = args.get('approved')

        # Pagination and sorting params
        page = args['page']
        per_page = args['per_page']
        sort_by = args['sort_by']
        sort_order = args['order']

        # Handle max size limit
        if per_page > 100:
            per_page = 100

        descending = sort_order == 'desc'

        # Handle max size limit
        if per_page > 100:
            per_page = 100

        start = per_page * (page - 1)
        stop = start + per_page

        kwargs = {
            'task_name': task_name,
            'approved': approved,
            'start': start,
            'stop': stop,
            'descending': descending,
            'sort_by': sort_by,
            'session': session
        }

        total_items = session.query(PendingEntry).count()

        if not total_items:
            return jsonify([])

        pending_entries = [
            pending.to_dict() for pending in list_pending_entries(**kwargs)
        ]

        total_pages = int(ceil(total_items / float(per_page)))

        if page > total_pages:
            raise NotFoundError('page %s does not exist' % page)

        # Actual results in page
        actual_size = min(per_page, len(pending_entries))

        # Get pagination headers
        pagination = pagination_headers(total_pages, total_items, actual_size,
                                        request)

        # Created response
        rsp = jsonify(pending_entries)

        # Add link header to response
        rsp.headers.extend(pagination)

        return rsp
Exemple #8
0
    def get(self, session=None):
        """List all pending entries"""
        args = pending_parser.parse_args()

        # Filter params
        task_name = args.get("task_name")
        approved = args.get("approved")

        # Pagination and sorting params
        page = args["page"]
        per_page = args["per_page"]
        sort_by = args["sort_by"]
        sort_order = args["order"]

        # Handle max size limit
        if per_page > 100:
            per_page = 100

        descending = sort_order == "desc"

        # Handle max size limit
        if per_page > 100:
            per_page = 100

        start = per_page * (page - 1)
        stop = start + per_page

        kwargs = {
            "task_name": task_name,
            "approved": approved,
            "start": start,
            "stop": stop,
            "descending": descending,
            "sort_by": sort_by,
            "session": session,
        }

        total_items = session.query(PendingEntry).count()

        if not total_items:
            return jsonify([])

        pending_entries = [pending.to_dict() for pending in list_pending_entries(**kwargs)]

        total_pages = int(ceil(total_items / float(per_page)))

        if page > total_pages:
            raise NotFoundError("page %s does not exist" % page)

        # Actual results in page
        actual_size = min(per_page, len(pending_entries))

        # Get pagination headers
        pagination = pagination_headers(total_pages, total_items, actual_size, request)

        # Created response
        rsp = jsonify(pending_entries)

        # Add link header to response
        rsp.headers.extend(pagination)

        return rsp
Exemple #9
0
    def get(self, session=None):
        """List all pending entries"""
        args = pending_parser.parse_args()

        # Filter params
        task_name = args.get('task_name')
        approved = args.get('approved')

        # Pagination and sorting params
        page = args['page']
        per_page = args['per_page']
        sort_by = args['sort_by']
        sort_order = args['order']

        # Handle max size limit
        if per_page > 100:
            per_page = 100

        descending = sort_order == 'desc'

        # Handle max size limit
        if per_page > 100:
            per_page = 100

        start = per_page * (page - 1)
        stop = start + per_page

        kwargs = {
            'task_name': task_name,
            'approved': approved,
            'start': start,
            'stop': stop,
            'descending': descending,
            'sort_by': sort_by,
            'session': session
        }

        total_items = session.query(PendingEntry).count()

        if not total_items:
            return jsonify([])

        pending_entries = [pending.to_dict() for pending in list_pending_entries(**kwargs)]

        total_pages = int(ceil(total_items / float(per_page)))

        if page > total_pages:
            raise NotFoundError('page %s does not exist' % page)

        # Actual results in page
        actual_size = min(per_page, len(pending_entries))

        # Get pagination headers
        pagination = pagination_headers(total_pages, total_items, actual_size, request)

        # Created response
        rsp = jsonify(pending_entries)

        # Add link header to response
        rsp.headers.extend(pagination)

        return rsp