Example #1
0
    def _ImportBackupResources(self, file_name):
        f = file(os.path.dirname(__file__) + file_name, 'r')
        for res in yaml.load_all(f):
            try:
                author_key = models.Author.get_by_key_name(res['author_id'])
                author_key2 = None
                if 'author_id2' in res:
                    author_key2 = models.Author.get_by_key_name(
                        res['author_id2'])

                resource = models.Resource(
                    title=res['title'],
                    subtitle=res.get('subtitle') or None,
                    description=res.get('description') or None,
                    author=author_key,
                    second_author=author_key2,
                    url=unicode(res['url']),
                    social_url=unicode(res.get('social_url') or ''),
                    browser_support=res.get('browser_support') or [],
                    update_date=res.get('update_date'),
                    publication_date=res['publication_date'],
                    tags=res['tags'],
                    draft=
                    False  # These are previous resources. Mark them as published.
                )
                resource.put()

            except TypeError:
                pass  # TODO(ericbidelman): Not sure why this is throwing an error, but
                # ignore it, whatever it is.
        f.close()
Example #2
0
def resource_create(uuid, resource_type, provider, endpoint, username,
                    password, token, availability_zone, region):
    new_res = models.Resource(uuid, resource_type, provider, endpoint,
                              username, password, token, availability_zone,
                              region)
    db.session.add(new_res)
    db.session.commit()
Example #3
0
def saveFileInfoToDb(fileInfo):
    is_binary = False
    if endsWithOneInArray(fileInfo['filename'].lower(),
                          ['jpg', 'png', 'ico', 'jpeg', 'bmp']):
        file_type = 'image'
        is_binary = True
    if is_binary:
        f = open(fileInfo['path'], 'rb')
    else:
        f = open(fileInfo['path'], 'r')
    data = f.read()
    f.close()
    blob_key = docs.Blob(data).save()
    file_type = 'file'
    if endsWithOneInArray(fileInfo['filename'].lower(),
                          ['jpg', 'png', 'ico', 'jpeg', 'bmp']):
        file_type = 'image'
    resource = models.Resource(name=fileInfo['pathname'],
                               type=file_type,
                               blob_key=blob_key,
                               tags="file resource my-3d-format")
    db.session.add(resource)
    db.session.commit()
    return True


# init_db()
# map(lambda x: files.append(getFileInfo(x)), filepaths)
# map(saveFileInfoToDb, files)
Example #4
0
def addResource(request):
    loggedin = True
    if not helper.Helper().isLoggedin(request):
        return redirect('login')
    email = request.session.data.keys()[0]
    context = RequestContext(request)
    if request.method == 'POST':
        form = forms.ResourceForm(request.POST, request.FILES)
        if form.is_valid():
            # save the resource to db
            nm = form.cleaned_data['name']
            descr = form.cleaned_data['description']
            tgs = form.cleaned_data['tags'].split()
            currdate = datetime.date.today()
            st = datetime.datetime.combine(currdate,
                                           form.cleaned_data['starttime'])
            et = datetime.datetime.combine(currdate,
                                           form.cleaned_data['endtime'])
            imgblob = None
            img = None
            if 'image' in request.FILES:
                img = request.FILES['image']
                imgblob = db.Blob(img.read())
            # save the resource
            resource = models.Resource(owner=email,
                                       name=nm,
                                       description=descr,
                                       image=imgblob,
                                       tags=tgs,
                                       postdate=currdate,
                                       starttime=st,
                                       endtime=et)
            resource.put()
            return redirect('home')
        else:
            message = form.errors
            form = forms.ResourceForm(initial={
                'resource_id': 0000,
            })
            return render_to_response('addResource.html', {
                'message': message,
                'loggedin': loggedin,
                'form': form
            }, context)
    else:
        form = forms.ResourceForm(initial={'resource_id': 0000})
    return render_to_response('addResource.html', {
        'loggedin': loggedin,
        'form': form
    }, context)
Example #5
0
async def create_resource(db: Session, shared: bool, file: UploadFile,
                          title: str, exam_id: int):
    exam = db.query(models.Exam).get(exam_id)
    if exam is None:
        return None

    filename, filetype = await _store_file(file)

    f_info = dict()
    f_info["filename"] = filename
    f_info["exam_id"] = exam_id
    f_info["title"] = title
    f_info["filetype"] = filetype
    f_info["shared"] = shared

    db_resource = models.Resource(**f_info)
    db.add(db_resource)
    db.commit()
    db.refresh(db_resource)
    return db_resource
Example #6
0
class DBHandler(ContentHandler):
    def _ImportBackupResources(self, file_name):
        f = file(os.path.dirname(__file__) + file_name, 'r')
        for res in yaml.load_all(f):
            try:
                author_key = models.Author.get_by_key_name(res['author_id'])
                author_key2 = None
                if 'author_id2' in res:
                    author_key2 = models.Author.get_by_key_name(
                        res['author_id2'])

                resource = models.Resource(
                    title=res['title'],
                    subtitle=res.get('subtitle') or None,
                    description=res.get('description') or None,
                    author=author_key,
                    second_author=author_key2,
                    url=unicode(res['url']),
                    social_url=unicode(res.get('social_url') or ''),
                    browser_support=res.get('browser_support') or [],
                    update_date=res.get('update_date'),
                    publication_date=res['publication_date'],
                    tags=res['tags'],
                    draft=
                    False  # These are previous resources. Mark them as published.
                )
                resource.put()

            except TypeError:
                pass  # TODO(ericbidelman): Not sure why this is throwing an error, but
                # ignore it, whatever it is.
        f.close()

    def _AddTestResources(self):
        #memcache.delete('tutorials')
        memcache.flush_all()
        self._ImportBackupResources('/database/tutorials.yaml')

    def _AddTestPlaygroundSamples(self):
        memcache.flush_all()
        self._ImportBackupResources('/database/playground.yaml')

    def _AddTestStudioSamples(self):
        memcache.flush_all()
        self._ImportBackupResources('/database/studio.yaml')

    def _AddTestAuthors(self):
        memcache.flush_all()
        f = file(os.path.dirname(__file__) + '/database/profiles.yaml', 'r')
        for profile in yaml.load_all(f):
            author = models.Author(
                key_name=unicode(profile['id']),
                given_name=unicode(profile['name']['given']),
                family_name=unicode(profile['name']['family']),
                org=unicode(profile['org']['name']),
                unit=unicode(profile['org']['unit']),
                city=profile['address']['locality'],
                state=profile['address']['region'],
                country=profile['address']['country'],
                google_account=str(profile.get('google')),
                twitter_account=profile.get('twitter'),
                email=profile['email'],
                lanyrd=profile.get('lanyrd', False),
                homepage=profile['homepage'],
                geo_location=db.GeoPt(profile['address']['lat'],
                                      profile['address']['lon']))
            author.put()
        f.close()

    def _NukeDB(self):
        authors = models.Author.all()
        for author in authors:
            author.delete()

        resources = models.Resource.all()
        for resource in resources:
            resource.delete()

        memcache.flush_all()

    # /database/resource
    # /database/resource/1234
    # /database/load_all
    # /database/drop_all
    # /database/author
    # /database/live
    def get(self, relpath, post_id=None):
        self._set_cache_param()

        if (relpath == 'live'):
            user = users.get_current_user()

            # Restrict access to this page to admins and whitelisted users.
            if (not users.is_current_user_admin()
                    and user.email() not in settings.WHITELISTED_USERS):
                return self.redirect('/')

            entity = models.LiveData.all().get()
            if entity:
                live_form = models.LiveForm(
                    entity.to_dict(),
                    initial={'gdl_page_url': entity.gdl_page_url})
            else:
                live_form = models.LiveForm()

            template_data = {'live_form': live_form}
            return self.render(data=template_data,
                               template_path='database/live.html',
                               relpath=relpath)

        elif (relpath == 'author'):
            # adds a new author information into DataStore.
            sorted_profiles = models.get_sorted_profiles(update_cache=True)
            template_data = {
                'sorted_profiles': sorted_profiles,
                'profile_amount': len(sorted_profiles),
                'author_form': models.AuthorForm()
            }
            return self.render(data=template_data,
                               template_path='database/author_new.html',
                               relpath=relpath)

        elif (relpath == 'drop_all'):
            if settings.PROD:
                return self.response.out.write(
                    'Handler not allowed in production.')
            self._NukeDB()

        elif (relpath == 'load_tutorials'):
            if settings.PROD:
                return self.response.out.write(
                    'Handler not allowed in production.')
            self._AddTestResources()

        elif (relpath == 'load_authors'):
            if settings.PROD:
                return self.response.out.write(
                    'Handler not allowed in production.')
            self._AddTestAuthors()

        elif (relpath == 'load_playground_samples'):
            if settings.PROD:
                return self.response.out.write(
                    'Handler not allowed in production.')
            self._AddTestPlaygroundSamples()

        elif (relpath == 'load_studio_samples'):
            if settings.PROD:
                return self.response.out.write(
                    'Handler not allowed in production.')
            self._AddTestStudioSamples()

        elif (relpath == 'load_all'):
            if settings.PROD:
                return self.response.out.write(
                    'Handler not allowed in production.')

            # TODO(ericbidelman): Make this async.
            self._AddTestAuthors()
            self._AddTestResources()
            self._AddTestPlaygroundSamples()
            self._AddTestStudioSamples()

        elif relpath == 'resource':
            tutorial_form = models.TutorialForm()

            if post_id:  # /database/resource/1234
                post = models.Resource.get_by_id(int(post_id))
                if post:
                    author_id = post.author.key().name()
                    second_author_id = (post.second_author
                                        and post.second_author.key().name())

                    # Adjust browser support so it renders to the checkboxes correctly.
                    browser_support = [
                        b.capitalize() for b in post.browser_support
                    ]
                    for b in browser_support:
                        if len(b) == 2:
                            browser_support[browser_support.index(
                                b)] = b.upper()

                    form_data = post.to_dict()
                    form_data['tags'] = ', '.join(post.tags)
                    form_data['author'] = author_id
                    form_data['second_author'] = second_author_id or author_id
                    form_data['browser_support'] = browser_support

                    tutorial_form = models.TutorialForm(form_data)

            template_data = {
                'tutorial_form':
                tutorial_form,
                # get_all() not used b/c we don't care about caching on this page.
                'resources':
                (models.Resource.all().order('-publication_date').fetch(
                    limit=settings.MAX_FETCH_LIMIT)),
                'post_id':
                post_id and int(post_id) or ''
            }
            return self.render(data=template_data,
                               template_path='database/resource_new.html',
                               relpath=relpath)

        # Catch all to redirect to proper page.
        return self.redirect('/database/resource')

    def post(self, relpath):

        if relpath == 'live':
            # Get first (and only) result.
            live_data = models.LiveData.all().get()
            if live_data is None:
                live_data = models.LiveData()

            live_data.gdl_page_url = self.request.get('gdl_page_url') or None

            #if live_data.gdl_page_url is not None:
            live_data.put()

            return self.redirect('/database/live')

        elif relpath == 'author':
            try:
                given_name = self.request.get('given_name')
                family_name = self.request.get('family_name')
                author = models.Author(
                    key_name=''.join([given_name, family_name]).lower(),
                    given_name=given_name,
                    family_name=family_name,
                    org=self.request.get('org'),
                    unit=self.request.get('unit'),
                    city=self.request.get('city'),
                    state=self.request.get('state'),
                    country=self.request.get('country'),
                    homepage=self.request.get('homepage') or None,
                    google_account=self.request.get('google_account') or None,
                    twitter_account=self.request.get('twitter_account')
                    or None,
                    email=self.request.get('email') or None,
                    lanyrd=self.request.get('lanyrd') == 'on')
                lat = self.request.get('lat')
                lon = self.request.get('lon')
                if lat and lon:
                    author.geo_location = db.GeoPt(float(lat), float(lon))

                author.put()

            except db.Error, e:
                # TODO: Doesn't repopulate lat/lng or return errors for it.
                form = models.AuthorForm(self.request.POST)
                if not form.is_valid():
                    sorted_profiles = models.get_sorted_profiles(
                        update_cache=True)
                    template_data = {
                        'sorted_profiles': sorted_profiles,
                        'profile_amount': len(sorted_profiles),
                        'author_form': form
                    }
                    return self.render(
                        data=template_data,
                        template_path='database/author_new.html',
                        relpath=relpath)
            else:
                self.redirect('/database/author')

        elif relpath == 'resource':
            author_key = models.Author.get_by_key_name(
                self.request.get('author'))
            author_key2 = models.Author.get_by_key_name(
                self.request.get('second_author'))

            if author_key.key() == author_key2.key():
                author_key2 = None

            tags = (self.request.get('tags') or '').split(',')
            tags = [x.strip() for x in tags if x.strip()]

            browser_support = [
                x.lower()
                for x in (self.request.get_all('browser_support') or [])
            ]

            pub = datetime.datetime.strptime(
                self.request.get('publication_date'), '%Y-%m-%d')

            update_date = self.request.get('update_date') or None

            tutorial = None
            if self.request.get('post_id'):
                tutorial = models.Resource.get_by_id(
                    int(self.request.get('post_id')))

            # Updating existing resource.
            if tutorial:
                try:
                    #TODO: This is also hacky.
                    tutorial.title = self.request.get('title')
                    tutorial.subtitle = self.request.get('subtitle') or None
                    tutorial.description = self.request.get('description')
                    tutorial.author = author_key
                    tutorial.second_author = author_key2
                    tutorial.url = self.request.get('url') or None
                    tutorial.browser_support = browser_support
                    tutorial.update_date = datetime.date.today()
                    tutorial.publication_date = datetime.date(
                        pub.year, pub.month, pub.day)
                    tutorial.tags = tags
                    tutorial.draft = self.request.get('draft') == 'on'
                    tutorial.social_url = unicode(
                        self.request.get('social_url') or '')
                except TypeError:
                    pass
            else:
                # Create new resource.
                try:
                    tutorial = models.Resource(
                        title=self.request.get('title'),
                        subtitle=self.request.get('subtitle') or None,
                        description=self.request.get('description'),
                        author=author_key,
                        second_author=author_key2,
                        url=self.request.get('url') or None,
                        browser_support=browser_support,
                        update_date=datetime.date.today(),
                        publication_date=datetime.date(pub.year, pub.month,
                                                       pub.day),
                        tags=tags,
                        draft=self.request.get('draft') == 'on',
                        social_url=self.request.get('social_url') or None)
                except TypeError:
                    pass

            tutorial.put()
Example #7
0
def save_resource(data):
    m = models.Resource(**data)
    m.save()
    if not pd.isnull(df.iloc[index, 3]):
        iped_ad = row['Inpatient/Ambulatory']
        if len(iped_ad.split(', ')) > 1:
            iped_ad = 'Both'
        if iped_ad == 'None' or iped_ad == None:
            iped_ad = 'Neither'
    else:
        iped_ad = 'Neither'

    resource_type = row['Resource Type']

    new_resource = models.Resource(title=title,
                                   institution=institution,
                                   description=description,
                                   link=link,
                                   submitter=submitter,
                                   date_added=date_added,
                                   show=show,
                                   iped_ad=iped_ad,
                                   resource_type=resource_type)

    cat_all = row['Tags'] if type(row['Tags']) != float else 'Miscellaneous'
    # cat = row['Type']
    # cats = cat.split(', ')
    cats = re.split(', |/', cat_all)

    for cat in cats:
        if len(cat) == 0:
            continue
        cat = cat.strip()
        cat = cat.title() if len(
    def post(self, relpath):

        if relpath == 'live':
            # Get first (and only) result.
            live_data = models.LiveData.all().get()
            if live_data is None:
                live_data = models.LiveData()

            live_data.gdl_page_url = self.request.get('gdl_page_url') or None

            live_data.put()

            return self.redirect('/database/live')

        elif relpath == 'author':
            try:
                given_name = self.request.get('given_name')
                family_name = self.request.get('family_name')
                author = models.Author(
                    key_name=''.join([given_name, family_name]).lower(),
                    given_name=given_name,
                    family_name=family_name,
                    org=self.request.get('org'),
                    unit=self.request.get('unit'),
                    city=self.request.get('city'),
                    state=self.request.get('state'),
                    country=self.request.get('country'),
                    homepage=self.request.get('homepage') or None,
                    google_account=self.request.get('google_account') or None,
                    twitter_account=self.request.get('twitter_account')
                    or None,
                    email=self.request.get('email') or None,
                    lanyrd=self.request.get('lanyrd') == 'on')
                lat = self.request.get('lat')
                lon = self.request.get('lon')
                if lat and lon:
                    author.geo_location = db.GeoPt(float(lat), float(lon))

                author.put()

            except db.Error:
                pass
            else:
                self.redirect('/database/author')

        elif relpath == 'resource':
            author_key = models.Author.get_by_key_name(
                self.request.get('author'))
            author_key2 = models.Author.get_by_key_name(
                self.request.get('second_author'))

            if author_key.key() == author_key2.key():
                author_key2 = None

            tags = (self.request.get('tags') or '').split(',')
            tags = [x.strip() for x in tags if x.strip()]

            browser_support = [
                x.lower()
                for x in (self.request.get_all('browser_support') or [])
            ]

            pub = datetime.datetime.strptime(
                self.request.get('publication_date'), '%Y-%m-%d')

            update_date = self.request.get('update_date') or None

            tutorial = None
            if self.request.get('post_id'):
                tutorial = models.Resource.get_by_id(
                    int(self.request.get('post_id')))

            # Updating existing resource.
            if tutorial:
                try:
                    #TODO: This is also hacky.
                    tutorial.title = self.request.get('title')
                    tutorial.description = self.request.get('description')
                    tutorial.author = author_key
                    tutorial.second_author = author_key2
                    tutorial.url = self.request.get('url') or None
                    tutorial.browser_support = browser_support
                    tutorial.update_date = datetime.date.today()
                    tutorial.publication_date = datetime.date(
                        pub.year, pub.month, pub.day)
                    tutorial.tags = tags
                    tutorial.draft = self.request.get('draft') == 'on'
                    tutorial.social_url = unicode(
                        self.request.get('social_url') or '')
                except TypeError:
                    pass
            else:
                # Create new resource.
                try:
                    tutorial = models.Resource(
                        title=self.request.get('title'),
                        description=self.request.get('description'),
                        author=author_key,
                        second_author=author_key2,
                        url=self.request.get('url') or None,
                        browser_support=browser_support,
                        update_date=datetime.date.today(),
                        publication_date=datetime.date(pub.year, pub.month,
                                                       pub.day),
                        tags=tags,
                        draft=self.request.get('draft') == 'on',
                        social_url=self.request.get('social_url') or None)
                except TypeError:
                    pass

            tutorial.put()

        # TODO: Don't use flush_all. Use flush_all_async() or only purge tutorials.
        # Once new entry is saved, flush memcache.
        memcache.flush_all()

        return self.redirect('/database/')
Example #10
0
    users_collection.append(
        models.User(user['id'], user['name'], user['email'],
                    user['created_at']))

roles_collection = []
for role in data.roles:
    roles_collection.append(models.Role(role['id'], role['name']))

action_types_collection = []
for action_type in data.action_types:
    action_types_collection.append(
        models.ActionType(action_type['id'], action_type['name']))

user_role_relation_collection = []
for user_role_relation in data.user_role_relations:
    user_role_relation_collection.append(
        models.UserRoleRelation(user_role_relation['user_id'],
                                user_role_relation['role_id']))

action_type_role_relation_collection = []
for action_type_role_relation in data.action_type_role_relations:
    action_type_role_relation_collection.append(
        models.ActionTypeRoleRelation(
            action_type_role_relation['action_type_id'],
            action_type_role_relation['role_id']))

resource_collection = []
for resource in data.resources:
    resource_collection.append(
        models.Resource(resource['id'], resource['title'],
                        resource['description'], resource['created_by']))