def get_data_for_feature(user, uid): try: f = get_feature_by_uid(uid) except: return False, HttpResponse("Feature %s does not exist" % uid, status=404) viewable, response = f.is_viewable(user) if not viewable: return viewable, response features = [] collections = [] if isinstance(f, FeatureCollection): obj_id = f.pk ct = ContentType.objects.get_for_model(f.__class__) for fmodel in get_feature_models(): unattached = list( fmodel.objects.filter(content_type=ct, object_id=obj_id)) features.extend(unattached) for cmodel in get_collection_models(): collections_top = list( cmodel.objects.filter(content_type=ct, object_id=obj_id)) collections.extend(collections_top) elif isinstance(f, Feature): features.append(f) return features, collections
def get_data_for_feature(user, uid): try: f = get_feature_by_uid(uid) except: return False, HttpResponse("Feature %s does not exist" % uid, status=404) viewable, response = f.is_viewable(user) if not viewable: return viewable, response features = [] collections = [] if isinstance(f, FeatureCollection): obj_id = f.pk ct = ContentType.objects.get_for_model(f.__class__) for fmodel in get_feature_models(): unattached = list(fmodel.objects.filter(content_type=ct,object_id=obj_id)) features.extend(unattached) for cmodel in get_collection_models(): collections_top = list(cmodel.objects.filter(content_type=ct,object_id=obj_id)) collections.extend(collections_top) elif isinstance(f, Feature): features.append(f) return features, collections
def get_shared_data(shareuser, sharegroup, user): sg = Group.objects.get(pk=sharegroup) su = User.objects.get(pk=shareuser) features = [] collections = [] for fmodel in get_feature_models(): # Find top level features shared with user # top-level == not belonging to any collections # have to use content_type and object_id fields to determine unattached = list( fmodel.objects.shared_with_user(user,filter_groups=[sg]) .filter(user=su, content_type=None,object_id=None) ) features.extend(unattached) for cmodel in get_collection_models(): collections_top = list( cmodel.objects.shared_with_user(user,filter_groups=[sg]) .filter(user=su, content_type=None,object_id=None) ) collections.extend(collections_top) return features, collections
def get_public_data(): """ No login necessary, everyone sees these Public groups defined in settings.SHARING_TO_PUBLIC_GROUPS """ from django.conf import settings public_groups = Group.objects.filter(name__in=settings.SHARING_TO_PUBLIC_GROUPS) features = [] collections = [] for fmodel in get_feature_models(): unattached = list(fmodel.objects.filter(sharing_groups__in=public_groups)) features.extend(unattached) for cmodel in get_collection_models(): collections_top = list(cmodel.objects.filter(sharing_groups__in=public_groups)) collections.extend(collections_top) return features, collections
def get_features(uids, user): """ Returns list of tuples representing mapnik layers Tuple => (model_class, [pks]) Note: currently just a single pk per 'layer' which is incredibly inefficient but the only way to ensure proper layer ordering (??). features = [ (Mpa, [49, 50]), (Pipeline, [32, 31]), (Shipwreck, [32, 31]) ] """ feature_models = get_feature_models() collection_models = get_collection_models() features = [] # list of tuples => (model, [pks]) for uid in uids: log.debug("processing uid %s" % uid) applabel, modelname, pk = uid.split('_') model = get_model_by_uid("%s_%s" % (applabel, modelname)) feature = get_feature_by_uid(uid) if user: viewable, response = feature.is_viewable(user) if not viewable: continue if model in collection_models: collection = get_feature_by_uid(uid) if user: viewable, response = collection.is_viewable(user) if not viewable: continue all_children = collection.feature_set(recurse=True) children = [ x for x in all_children if x.__class__ in feature_models ] for child in children: features.append((child.__class__, [child.pk])) else: features.append((model, [int(pk)])) return features
def get_user_data(user): """ Organizes user's Features and FeatureCollections. Only returns objects owned by user, not shared Returns only the features/collections at the top level, nested child features will be handled later through recursive calls to feature_set. """ toplevel_features = [] toplevel_collections = [] for fmodel in get_feature_models(): unattached = list(fmodel.objects.filter(user=user, content_type=None, object_id=None)) toplevel_features.extend(unattached) for cmodel in get_collection_models(): collections_top = list(cmodel.objects.filter(user=user, content_type=None, object_id=None)) toplevel_collections.extend(collections_top) return toplevel_features, toplevel_collections
def get_features(uids,user): """ Returns list of tuples representing mapnik layers Tuple => (model_class, [pks]) Note: currently just a single pk per 'layer' which is incredibly inefficient but the only way to ensure proper layer ordering (??). features = [ (Mpa, [49, 50]), (Pipeline, [32, 31]), (Shipwreck, [32, 31]) ] """ feature_models = get_feature_models() collection_models = get_collection_models() features = [] # list of tuples => (model, [pks]) for uid in uids: log.debug("processing uid %s" % uid) applabel, modelname, pk = uid.split('_') model = get_model_by_uid("%s_%s" % (applabel,modelname)) feature = get_feature_by_uid(uid) if user: viewable, response = feature.is_viewable(user) if not viewable: continue if model in collection_models: collection = get_feature_by_uid(uid) if user: viewable, response = collection.is_viewable(user) if not viewable: continue all_children = collection.feature_set(recurse=True) children = [x for x in all_children if x.__class__ in feature_models] for child in children: features.append((child.__class__,[child.pk])) else: features.append((model,[int(pk)])) return features
def get_public_data(): """ No login necessary, everyone sees these Public groups defined in settings.SHARING_TO_PUBLIC_GROUPS """ from django.conf import settings public_groups = Group.objects.filter( name__in=settings.SHARING_TO_PUBLIC_GROUPS) features = [] collections = [] for fmodel in get_feature_models(): unattached = list( fmodel.objects.filter(sharing_groups__in=public_groups)) features.extend(unattached) for cmodel in get_collection_models(): collections_top = list( cmodel.objects.filter(sharing_groups__in=public_groups)) collections.extend(collections_top) return features, collections
def get_shared_data(shareuser, sharegroup, user): sg = Group.objects.get(pk=sharegroup) su = User.objects.get(pk=shareuser) features = [] collections = [] for fmodel in get_feature_models(): # Find top level features shared with user # top-level == not belonging to any collections # have to use content_type and object_id fields to determine unattached = list( fmodel.objects.shared_with_user(user, filter_groups=[sg]).filter( user=su, content_type=None, object_id=None)) features.extend(unattached) for cmodel in get_collection_models(): collections_top = list( cmodel.objects.shared_with_user(user, filter_groups=[sg]).filter( user=su, content_type=None, object_id=None)) collections.extend(collections_top) return features, collections
def get_user_data(user): """ Organizes user's Features and FeatureCollections. Only returns objects owned by user, not shared Returns only the features/collections at the top level, nested child features will be handled later through recursive calls to feature_set. """ toplevel_features = [] toplevel_collections = [] for fmodel in get_feature_models(): unattached = list( fmodel.objects.filter(user=user, content_type=None, object_id=None)) toplevel_features.extend(unattached) for cmodel in get_collection_models(): collections_top = list( cmodel.objects.filter(user=user, content_type=None, object_id=None)) toplevel_collections.extend(collections_top) return toplevel_features, toplevel_collections