'Transform an expression to an ordered list of terms.
Examples
>>> from sympy import sin, cos
>>> from sympy.abc import x
>>> (sin(x)**2*cos(x) + sin(x)**2 + 1).as_ordered_terms()
[sin(x)**2*cos(x), sin(x)**2, 1]'

def as_ordered_terms(self, order=None, data=False):

    (key, reverse) = self._parse_order(order)
    (terms, gens) = self.as_terms()
    if (not any((term.is_Order for (term, _) in terms))):
        ordered = sorted(terms, key=key, reverse=reverse)
    else:
        (_terms, _order) = ([], [])
        for (term, repr) in terms:
            if (not term.is_Order):
                _terms.append((term, repr))
            else:
                _order.append((term, repr))
        ordered = (sorted(_terms, key=key, reverse=True) + sorted(_order, key=key, reverse=True))
    if data:
        return (ordered, gens)
    else:
        return [term for (term, _) in ordered]
