def sorted_field_names(obj):

    return sorted(
        f for f in dir(obj)
        if not f.startswith('_') and not hasattr(getattr(obj, f), '__call__'))
There *has* to be a more elegant way of doing this.
dataset/ETHPy150Open MirantisWorkloadMobility/CloudFerry/cloudferry/lib/utils/bases.py/sorted_field_names--crossover with--dataset/ETHPy150Open mozilla/inventory/mozdns/api/v1/api.py/CommonDNSResource.apply_commit