Ejemplo n.º 1
0
def update_monthly_games_played():
    gc = gspread.login('*****@*****.**', 'muatkienjwxfpnxn')
    player_cell_locations = {'thewarmth00':'B51',
                                'rob_chainsaw':'B53',
                                'mashley93':'B55',
                                'peachy36west':'B57',
                                'm_sibs':'B59',
                                'rc_van':'B61',
                                'soviet_canuck':'B63',
                                'undertheblanket':'B65',
                                'vsmewen':'B67',
                                'hokagesama1':'B69',
                                'lnferno31':'H86'}
    sheet = gc.open_by_key('0Ak-m4uT6aXL1dExuUHdLV0x2aTNFSGNRMTV2WWdLX2c').get_worksheet(9)
    session = Session()
    our_players = session.query(Player).all()
    for player in our_players:
        cell_location = player_cell_locations[player.username.lower()]
        games_played = len(session.query(GamePlayed).filter_by(player_id=player.id).all())
        value = sheet.acell(cell_location).value
        sheet.update_acell(cell_location, str(games_played))
        if sheet.acell(cell_location).value != value:
            pass
        else:
            pass
    def _getSessions(self, request):
        """Return sessions by conference and optionally filter by typeOfSession or duartion or date. 
        Or return sessions by speaker."""

        # Get conference
        if hasattr(request, 'websafeConferenceKey') and request.websafeConferenceKey:
          urlkey = request.websafeConferenceKey
          conf_key = ndb.Key(urlsafe = urlkey)
          conf = conf_key.get()

          # create ancestor query for all key matches for this user
          sessions = Session.query(ancestor = conf_key)

          # if typeOfSession has been specified, filter by that
          if hasattr(request, 'typeOfSession') and request.typeOfSession:
            sessions = sessions.filter(Session.typeOfSession == request.typeOfSession)

          # if duration has been specified, filter by that
          if hasattr(request, 'duration') and request.duration:
            sessions = sessions.filter(Session.duration <= int(request.duration))
            sessions = sessions.filter(Session.duration > 0)

          # if date has been specified, filter by that
          if hasattr(request, 'date') and request.date:
            sessions = sessions.filter(Session.date == datetime.strptime(request.date[:10], "%Y-%m-%d").date())

        elif request.speaker:
          sessions = Session.query()
          sessions = sessions.filter(Session.speaker == request.speaker)

        return SessionForms(
            items=[self._copySessionToForm(session) for session in sessions]
        )
Ejemplo n.º 3
0
    def _createSessionObject(self, request):
        """Create or update Session object, returning SessionForm/request."""
        # Load user data and check to see if authorized
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        user_id = user.email()

        # Check that Session name exists
        if not request.name:
            raise endpoints.BadRequestException("Session 'name' field required")
        # Check that Session speaker's name exists
        if not request.speaker:
            raise endpoints.BadRequestException("Session 'speaker' field required")

        # Copy SessionForm/ProtoRPC message into dictionary
        data = {field.name: getattr(request, field.name) for field in request.all_fields()}
        data['conference'] = ndb.Key(urlsafe=request.websafeConferenceKey)
        del data['websafeConferenceKey']
        del data['sessionKey']

        # Convert date from string to date object
        if data['startDate']:
            data['startDate'] = datetime.strptime(data['startDate'][:10], "%Y-%m-%d").date()

        # Create Session
        new_key = Session(**data).put()

        # Add get_featured_speaker to task queue
        taskqueue.add(params={'conferenceKey': request.websafeConferenceKey,
                              'speaker': data['speaker']},
                      url='/tasks/get_featured_speaker')

        request.sessionKey = new_key.urlsafe()
        return self._copySessionToForm(request)
    def doubleInequalityFilter(self, request):
        """ Queries for non-workshop sessions before 7PM.
            Handling queries with multiple inequality filters.
        """

        # define time object for 7PM
        time_seven_pm = datetime.strptime('19', '%H').time()

        # First inequality query
        #   Get sessions which are NOT 'Workshop'
        non_workshop_keys = Session.query(
            Session.session_type != 'Workshop').fetch(keys_only=True)

        # Second inequality query
        #   Get sessions which start before 7PM
        before_seven_pm_keys = Session.query(
            Session.startTime < time_seven_pm).fetch(keys_only=True)

        # find sets of matching keys between the two queries
        #   and retrieve their entities.
        matching_sessions = ndb.get_multi(
            set(non_workshop_keys).intersection(before_seven_pm_keys))

        return SessionForms(items=[self._copySessionToForm(sess)
                            for sess in matching_sessions])
    def createSession(self, request):
        """ Creates Session from given SESSION_POST_REQUEST_FOR_CONFERENCE and returns a SessionForm."""
        # (SessionForm, websafeConferenceKey) -- open only to the organizer of the conference
        profile = self._getProfileFromUser()
        conf = ndb.Key(urlsafe=request.websafeConferenceKey).get()
        if not conf:
            raise endpoints.NotFoundException(
                'No conference found with key: %s' % request.websafeConferenceKey)
        if conf.key.parent().get() != profile:
            raise endpoints.UnauthorizedException('Session creation is open only to the organizer of the conference!')

        # copy SESSION_POST_REQUEST_FOR_CONFERENCE/ProtoRPC Message into dict
        data = {field.name: getattr(request, field.name) for field in request.all_fields()}
        session = Session(name=data['name'],parent=conf.key)

        # convert dates from strings to Date objects; set month based on start_date
        if data['dateTime']:
            session.date = data['dateTime'].date()
            session.time = data['dateTime'].time()
        if data['highlights']:
            session.highlights = data['highlights']
        if data['typeOfSession']:
            session.typeOfSession = data['typeOfSession']
        if data['duration']:
            session.duration = data['duration']
        if data['speakers']:
            session.speakers = data['speakers']

        session.put()
        
        if data['speakers']:
            session.speakers = data['speakers']
            logging.debug("Creating session with speakers, adding task to taskqueue.", str(session))
            taskqueue.add(url='/tasks/add_featured_speaker', params={'sessionKeyUrlSafe': session.key.urlsafe()})
        return self._copySessionToForm(session)
Ejemplo n.º 6
0
def save(request):
    results = simplejson.loads(request.POST['results'])

    session_key = request.session.session_key    #request.COOKIES[settings.SESSION_COOKIE_NAME]
    session = Session(key=session_key, global_time=time())
    session.save()

    # Convert user results to Result table row
    db_results = []
    for result in results:
        db_result = Result(
            session = session,
            time = result['time'],
            selection = result['selection'],
        )
        db_result.image_id = result['id']
        db_results.append(db_result)

    try:
        # This could be done better with a transaction
        for db_result in db_results:
            db_result.save()
    except Exception as e:
        print e
        pass

    return HttpResponseRedirect('/static/thankyou.html')
Ejemplo n.º 7
0
    def getFeaturedSpeaker(self, request):
        """Returns the sessions of the featured speaker"""
        data = memcache.get("featured_speaker")
        from pprint import pprint

        pprint(data)
        sessions = []
        sessionNames = []
        speaker = None

        if data and data.has_key("speaker") and data.has_key("sessionNames"):
            speaker = data["speaker"]
            sessionNames = data["sessionNames"]
        else:
            upcoming_session = (
                Session.query(Session.date >= datetime.now()).order(Session.date, Session.startTime).get()
            )
            if upcoming_session:
                speaker = upcoming_session.speaker
                sessions = Session.query(Session.speaker == speaker)
                sessionNames = [session.name for session in sessions]

        # create speaker form
        sf = SpeakerForm()
        for field in sf.all_fields():
            if field.name == "sessionNames":
                setattr(sf, field.name, sessionNames)
            elif field.name == "speaker":
                setattr(sf, field.name, speaker)
        sf.check_initialized()
        return sf
    def _cacheFeaturedSpeaker(websafeConferenceKey, speaker):
        """Assign featured speaker to memcache"""
        # logging.info('1: This is the websafeConferenceKey: ' + websafeConferenceKey)
        # logging.info('2: This is the speaker: ' + speaker)

        conf = ndb.Key(urlsafe=websafeConferenceKey)

        print "3. This is the conf: ", conf

        sessions = Session.query(ancestor=conf)

        sessions = Session.query(Session.speaker == speaker).fetch()

        count = len(sessions)

        if count > 1:
            featured = "Todays featured speaker is %s at session %s" % (
                speaker,
                ", ".join(session.name for session in sessions),
            )
            memcache.set(MEMCACHE_FEATURED_KEY, featured)
        else:
            # If there are is no featured speaker,
            # delete the memcache featured entry
            featured = ""
            memcache.delete(MEMCACHE_FEATURED_KEY)

        return featured
Ejemplo n.º 9
0
    def _createSessionObject(self, request):
        """Create a session object, return SessionForm"""
        # check for authentication
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        user_id = getUserId(user)

        # get parent Conference from request; raise exception if not found
        c_key = ndb.Key(urlsafe=request.websafeConferenceKey)
        conf = c_key.get()
        if not conf:
            raise endpoints.NotFoundException(
                'No conference found with key: %s' %
                request.websafeConferenceKey)

        if not request.sessionName:
            raise endpoints.BadRequestException(
                "Session 'sessionName' field required")

        # check that user is owner of given conference
        if user_id != conf.organizerUserId:
            raise endpoints.ForbiddenException(
                'Only the owner can add a session to the conference.')

        # copy ConferenceForm/ProtoRPC Message into dict
        data = {field.name: getattr(request, field.name)
                for field in request.all_fields()}
        del data['websafeConferenceKey']
        del data['websafeKey']

        # add default values for those missing
        for df in SDEFAULTS:
            if data[df] in (None, []):
                data[df] = SDEFAULTS[df]
                setattr(request, df, SDEFAULTS[df])

        # convert dates from strings; set month based on start_date
        if data['date']:
            data['date'] = datetime.strptime(data['date'][:10],
                                             "%Y-%m-%d").date()

        # convert type of session to uppercase
        data['typeOfSession'] = data['typeOfSession'].upper()

        # generate Session ID based on Conference ID
        s_id = Conference.allocate_ids(size=1, parent=c_key)[0]
        s_key = ndb.Key(Session, s_id, parent=c_key)
        data['key'] = s_key

        # return a session form with the same data as in the datastore
        newSess = Session(**data)
        newSess.put()

        # TASK 4
        # Check for featured speaker
        taskqueue.add(params={'sessionKey': s_key.urlsafe()},
                      url='/tasks/set_featured')

        return self._copySessionToForm(newSess)
Ejemplo n.º 10
0
    def server_event_callback(server, event_info, **kwargs):
        if event_info.event not in [ErlyvideoEvent.STREAM_STARTED, ErlyvideoEvent.STREAM_STOPPED,
                                    ErlyvideoEvent.USER_PLAY, ErlyvideoEvent.USER_STOP]:
            return

        try:
            active_session = Session.objects.get(server=server, stream=event_info.stream,
                stream_name=event_info.stream_name, finish_at=None)
        except Session.DoesNotExist:
            active_session = None

        if event_info.event in [ErlyvideoEvent.STREAM_STARTED, ErlyvideoEvent.USER_PLAY]:
            if active_session:
                logger.warning('Session "%s-%s" already exists and active.' % (event_info.stream, event_info.stream_name))
                active_session.finish_at = datetime.today()
                active_session.save()

            session_type = Session.TYPE_BROADCAST if ErlyvideoEvent.STREAM_STARTED == event_info.event else Session.TYPE_PLAY
            session = Session(server=server, type=session_type, stream=event_info.stream,
                stream_name=event_info.stream_name, user=event_info.user_id)
            session.save()

        if event_info.event in [ErlyvideoEvent.STREAM_STOPPED, ErlyvideoEvent.USER_STOP]:
            if active_session:
                active_session.finish_at = datetime.today()
                active_session.save()
            else:
                logger.warning('Session "%s-%s" not found.' % (event_info.stream, event_info.stream_name))
Ejemplo n.º 11
0
    def _getSessionsNotTypeBeforeHour(self, request):
        """Find sessions for the conference before the given hour (24 hour) and
        not of type specified."""
        # get Conference key from request; bail if not found
        c_key = ndb.Key(urlsafe=request.websafeConferenceKey)
        if not c_key:
            raise endpoints.NotFoundException(
                'No conference found with key: %s' %
                request.websafeConferenceKey)

        # Get a list of all types except the type specified
        nottype = Session.query(
            Session.typeOfSession != request.nottype).fetch()
        if not nottype:
            raise endpoints.NotFoundException(
                'No sessions found with type not: %s' % request.nottype)
        notlist = [r.typeOfSession for r in nottype]

        # For all types in nottype, filter sessionBefore for these types
        sessnt = Session.query(Session.typeOfSession.IN(notlist))
        # Filter sessions for those in the specified conference
        c_sessnt = sessnt.filter(Session.conferenceKey == c_key)
        # Filter query for sessions that occur before the time
        qtime = datetime.time(int(request.hour), 0, 0)
        c_sessntBefore = c_sessnt.filter(Session.startTime < qtime)

        # return set of SessionForm objects per Session
        return SessionForms(
            items=[self._copySessionToForm(s) for s in c_sessntBefore])
Ejemplo n.º 12
0
 def _cacheFeaturedSpeaker(session_key):
     """Assign Featured Speaker to memcache; used by getFeaturedSpeaker"""
     # Use the urlsafe key to grab the session key
     session = ndb.Key(urlsafe=session_key).get()
     # Set the key for the memcache based on the confKey
     featured = 'fs_' + str(session.key.parent().urlsafe())     
     print 'In cacheFeaturedSpeaker'
     # Get all of the sessions for the conference
     sessions = Session.query(ancestor=session.key.parent()).fetch()
     count = 0
     # Iterate through the sessions to find the speaker with the most sessions
     for sess in sessions:
         spk_sess = Session.query(ancestor=session.key.parent()).filter(Session.speaker==sess.speaker)
         spk_count = spk_sess.count()
         if spk_count > count:
             count = spk_count
             # Save the speaker and sessions for the speaker with the most
             featured_speaker = sess.speaker
             fs_sessions = spk_sess
     # Grab the speaker
     speaker = ndb.Key(urlsafe=featured_speaker).get()
     # Set the speaker name and their sessions in a string
     fs_data = {}
     fs_data['name'] = speaker.name
     fs_data['sessions'] = []
     for sess in fs_sessions:
         fs_data['sessions'].append(sess.name)
     mem_val = json.dumps(fs_data)
     # Set the created json string in memcache
     memcache.set(key=featured, value=fs_data)
Ejemplo n.º 13
0
    def _createSessionObject(self, request):
        """Create or update Session object, returning SessionForm/request."""
        # preload necessary data items
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException("Authorization required")
        user_id = getUserId(user)

        if not request.sessionName:
            raise endpoints.BadRequestException("Session 'name' field required")

        # update existing conference
        conf = ndb.Key(urlsafe=request.websafeConferenceKey).get()
        # check that conference exists
        if not conf:
            raise endpoints.NotFoundException("No conference found with key: %s" % request.websafeConferenceKey)

        # check that user is owner
        if user_id != conf.organizerUserId:
            raise endpoints.ForbiddenException("Only the owner can update the conference.")

        data = {field.name: getattr(request, field.name) for field in request.all_fields()}
        wsck = data["websafeConferenceKey"]
        p_key = ndb.Key(Conference, request.websafeConferenceKey)
        c_id = Session.allocate_ids(size=1, parent=p_key)[0]
        c_key = ndb.Key(Session, c_id, parent=p_key)

        data["startTime"] = datetime.strptime(data["startTime"], "%H:%M:%S").time()

        data["date"] = datetime.strptime(data["date"], "%Y-%m-%d").date()

        data["key"] = c_key
        data["websafeConferenceKey"] = request.websafeConferenceKey

        speaker_name = data["speaker"]

        # Query sessions by speaker and get all of the ones that are currently in the datastore and add them
        # to the memcache
        sessions_by_speaker = Session.query(
            ndb.AND(Session.speaker == speaker_name, Session.websafeConferenceKey == request.websafeConferenceKey)
        ).fetch()

        speaker_sessions = []

        speaker_sessions = FEATURED_SPEAKER.format(
            speaker_name, ",".join([session.sessionName for session in sessions_by_speaker])
        )

        print speaker_sessions

        if len(sessions_by_speaker) >= 1:
            # add the speaker and the sessions they are in into the memcache
            self._speaker_to_memcache(speaker_sessions)
        else:
            print "this speaker has 0 sessions"

        # add the new session data to datastore
        Session(**data).put()

        return request
    def getQueryProblem(self, request):
        # make sure user is Authorized
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')

        # create query all non-workshop sessions before 7pm
        # User would set Equal_to_Type = False, meaning they don't want that type 
        # User would set Before_OR_After = Before(string), and set the starttime to 7pm. 
        if request.Before_OR_After == "Before" :
            Sessions = Session.query(Session.startTime <= request.startTime)
            Sessions = Sessions.order(Session.startTime)
            temp = []
            for sess in Sessions:
                if request.typeOfSession in sess.typeOfSession and request.matchSessionType:
                    temp.append(sess)
                elif request.typeOfSession not in sess.typeOfSession and not request.matchSessionType:
                    temp.append(sess)
            Sessions = temp
        else:
            Sessions = Session.query(Session.startTime >= request.startTime)
            Sessions = Sessions.order(Session.startTime)
            temp = []
            for sess in Sessions:
                if request.typeOfSession in sess.typeOfSession and request.matchSessionType:
                    temp.append(sess)
                elif request.typeOfSession not in sess.typeOfSession and not request.matchSessionType:
                    temp.append(sess)
            Sessions = temp

        return SessionForms(
            items=[self._copySessionToForm(sess) for sess in Sessions]
        )
Ejemplo n.º 15
0
class Post(bourbon.ModelInterface):
    @staticmethod
    def all():
        sess = Session()
        return [post.id for post in sess.query(PostModel).all()]
    
    @staticmethod
    def open(identifier):
        self = Post()
        self.sess = Session()
        self.post = self.sess.query(PostModel).filter_by(id=identifier).scalar()
        if self.post is None:
           self.post = PostModel()
        return self

    @staticmethod
    def stat(identifier):
        post = Post.open(identifier)
        return bourbon.Stat.as_file(len(post.read())).as_dict()

    def close(self):
        self.sess.add(self.post)
        self.sess.commit()
        del self.sess
        del self.post
        return True
    
    def read(self):
        return self.post.text

    def write(self, data):
        self.post.text = data
        
    def getattr(self):
        return bourbon.FILE
    def _getConferenceSessions(self, request, typeOfSession=None, speaker=None):
        """Its a multi purpose method which will return session forms for below three combination
         - websafeConferenceKey
         - websafeConferenceKey with typeOfSession
         - speaker  """
        wsck = request.websafeConferenceKey

        # If type of session provided without conference key then its an error
        if typeOfSession and not wsck:
            raise endpoints.BadRequestException("If typeOfSession given then confernce key should also be provided.")

        if wsck:
            # if conf key availabe then get all its child sessions
            conf = ndb.Key(urlsafe=wsck).get()
            conf_key = conf.key
            if not conf:
                raise endpoints.NotFoundException('conference is invalid')

            sessions = Session.query(ancestor=conf_key)
            # filter type of session if provided
            if typeOfSession is not None:
                sessions = sessions.filter(Session.typeOfSession == typeOfSession)
        else: # if conf key is none then filter by speaker only
            sessions = Session.query(Session.speaker == speaker)
        return SessionForms(
            sessions = [self._copySessionToForm(session)for session in sessions])
Ejemplo n.º 17
0
    def addFeaturedSession(speaker, sessionName, confKey):
        """
        This is an task that can add a session into the
        FeaturedSpeakerQueryForm in memcache
        """
        if not speaker:
            return

        c_key = ndb.Key(urlsafe=confKey)
        speakerSessionQuant = Session.query(
                ancestor=c_key).filter(Session.speaker == speaker).count()
        if speakerSessionQuant > 1:
            cacheForm = memcache.get(MEMCACHE_FEATUREDSPEAKER_KEY)
            # if the input speaker is the featured speaker, we add the session
            # to the featured sessions list and save it to memcache
            if cacheForm and cacheForm.featuredSpeaker == speaker:
                cacheForm.featuredSessions.append(sessionName)
                memcache.set(MEMCACHE_FEATUREDSPEAKER_KEY, cacheForm)
            else:
                # if the input speaker is not featured speaker, we have to
                # scan the conference and add associated sessions
                ancestor_key = ndb.Key(urlsafe=confKey)
                sessions = Session.query(ancestor=ancestor_key).fetch()
                featuredSessions = []
                for session in sessions:
                    if session.speaker == speaker:
                        featuredSessions.append(session.name)
                cacheForm = FeaturedSpeakerQueryForm(
                                featuredSpeaker=speaker,
                                featuredSessions=featuredSessions
                                                    )
                memcache.set(MEMCACHE_FEATUREDSPEAKER_KEY, cacheForm)
Ejemplo n.º 18
0
    def _handleFeaturedSpeaker(websafeConferenceKey, websafeSessionKey):
        """Add given speaker to given conference's featured speaker memcache."""
        # get conference and session keys
        conf = ndb.Key(urlsafe=websafeConferenceKey).get()
        sess = ndb.Key(urlsafe=websafeSessionKey).get()
        
        # if this session's speaker has more than one session in this 
        # conference, add them and their sessions to memcache announcement
        for s in sess.speaker:
            # get other sessions in this conference with same speaker
            other_sess = Session.query(ancestor=conf.key)
            other_sess = other_sess.filter(Session.speaker==s)
            
            # if more than one, add announcement
            if other_sess.count() > 1:
                # make unique memcache key of conference and speaker keys
                sp_key = '_'.join(('sk', websafeConferenceKey, s.urlsafe()))
                speaker = s.get()
                # create value to be string of speaker's name and sessions
                val = speaker.name + ' - ' + '; '.join(ss.name for ss \
                            in Session.query(Session.speaker==s))

                memcache.set(sp_key, val)

                # add this speaker's key to this conference's list of speaker 
                # keys (there can be multiple speakers with many sessions)
                mem_key = '_'.join((MEMCACHE_FEATURED_SPEAKERS_KEY, 
                                    websafeConferenceKey))
                speaker_keys = memcache.get(mem_key)
                if speaker_keys:
                    speaker_keys.add(sp_key)
                else:
                    speaker_keys = set([sp_key])
                memcache.set(mem_key, speaker_keys)
Ejemplo n.º 19
0
    def post(self, id = None):
	request = self.wsgi_request
	response = self.wsgi_response
	c = self.context

	param_dict = dict(
		title = request.params.title,
		conf_id = request.params.conf_id,
		desc = request.params.desc,
		venue = request.params.venue,
		talk_type = request.params.talk_type,
		start_date = parse(request.params.start_date),
		end_date = parse(request.params.end_date),
		duration = request.params.duration,
		speaker_title = request.params.speaker_title)
	content = param_dict
	session = Session(**param_dict)
	session = session.save()

	conf = Conference.get(session.conf_id)
	if conf:
	    conf.add_session(session)

	self.set_body(session.to_json())
	response.headers['content-type'] = 'application/json'
	return self.render()
Ejemplo n.º 20
0
 def filterPlayground2(self, request):
     """Filter Playground 2 - Task 3 Problem"""
     
     #First filter by time, query all session before 7pm
     timefilter = datetime.strptime('19:00', '%H:%M').time()
     sessions1 = Session.query(Session.startTime < timefilter)
     
     #second filter by session type, query all session by the type
     sessions2 = Session.query(Session.typeOfSession != "WORKSHOP")
     
     #fetch the keys of the first filter
     s1_key = sessions1.fetch(keys_only=True)
     
     #fetch the keys of the second filter
     s2_key = sessions2.fetch(keys_only=True)
     
     #find the intersect of both filter.
     #which will return a list with keys that satisfy both filter condition           
     s1ns2 = set(s1_key) & set(s2_key)
     
     #get the sessions from the keys
     sessions = ndb.get_multi(s1ns2)
     
     return SessionForms(
         items=[self._copySessionToForm(session) for session in sessions]
     )
Ejemplo n.º 21
0
 def save(self):
     session = Session(
         session_key = self.session_key,
         session_data = self.encode(self._session),
         expire_date = self.get_expiry_date()
     )
     session.put()
Ejemplo n.º 22
0
    def getFeaturedSpeaker(self, request):
        """Returns the sessions of the featured speaker"""
        # attempt to get data from memcache
        data = memcache.get('featured_speaker')
        from pprint import pprint
        pprint(data)
        sessions = []
        sessionNames = []
        speaker = None

        if data and data.has_key('speaker') and data.has_key('sessionNames'):
            speaker = data['speaker']
            sessionNames = data['sessionNames']

        # if memcache fails or is empty, pull speaker from upcoming session
        else:
            upcoming_session = Session.query(Session.date >= datetime.now())\
                                    .order(Session.date, Session.startTime).get()
            if upcoming_session:
                speaker = upcoming_session.speaker
                sessions = Session.query(Session.speaker == speaker)
                sessionNames = [session.name for session in sessions]

        # populate speaker form
        sf = SpeakerForm()
        for field in sf.all_fields():
            if field.name == 'sessionNames':
                setattr(sf, field.name, sessionNames)
            elif field.name == 'speaker':
                setattr(sf, field.name, speaker)
        sf.check_initialized()
        return sf
Ejemplo n.º 23
0
    def getConferenceSessionsByType(self, request):
        """Given a conference, return all sessions of a specified type
        (eg lecture, keynote, workshop)"""

        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException(
                'You must be logged in to call this method.')
        user_id = getUserId(user)

        conf_key = ndb.Key(
            urlsafe=request.websafeConferenceKey)

        # verify websafekey points to Conference entity.
        if conf_key.kind() != 'Conference':
            raise endpoints.BadRequestException(
                'websafeKey must point to Conference entity.')
        sessions = Session.query(ancestor=conf_key)

        q = Session.query(
            ancestor=ndb.Key(urlsafe=request.websafeConferenceKey))
        q = q.filter(request.type == Session.typeOfSession)

        return SessionForms(
            items=[self._copySessionToForm(sess) for sess in q])
Ejemplo n.º 24
0
    def NonWorkshopSessionsBefore7pm(self, request):
        """Return Non-Workshop Sessions Before 7pm."""
        # make sure user is authed
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        # user_id = getUserId(user)

        theStartTime = datetime.strptime("19:00", "%H:%M").time()

        # idea from reading answers from Tim Hoffman
        # (http://stackoverflow.com/users/1201324/tim-hoffman)
        # and Brent Washburne
        # (http://stackoverflow.com/users/584846/brent-washburne)
        # specifically Brent's answer here:
        # https://stackoverflow.com/questions/33549573/combining-results-of-multiple-ndb-inequality-queries

        # create two separate inequality queries and get the keys from each
        # then use set.intersection method to get the
        # intersection of the two sets
        query1 = Session.query(Session.typeOfSession != "Workshop").fetch(
                               keys_only=True)
        query2 = Session.query(Session.startTime < theStartTime).fetch(
                               keys_only=True)
        sessions = ndb.get_multi(set(query1).intersection(query2))

        # return set of SessionForm objects per Conference
        return SessionForms(
            items=[self._copySessionToForm(session) for session in sessions]
        )
Ejemplo n.º 25
0
def add_session(request, instance_name):
    start_date = request.POST['start_date']
    end_date = request.POST['end_date']
    instance = get_object_or_404(ExperimentInstance, name=instance_name)
    session = Session(instance=instance, start_date=start_date, end_date=end_date)
    session.save()
    return JsonResponse({'ok': 'ok'})
    def getFeaturedSpeaker(self, request):
        """Returns the sessions of the featured speaker"""
        # try to get data from memcache
        data = memcache.get(MEMCACHE_FEATURED_SPEAKER_KEY)
        sessions = []
        sessionNames = []
        speaker = None

        if data and data.has_key('speaker') and data.has_key('sessionNames'):
            speaker = data['speaker']
            sessionNames = data['sessionNames']

        # if data is not on memcache, get speaker from upcoming session
        else:
            nextSession = Session.query(Session.date >= datetime.now()).order(Session.date, Session.startTime).get()
            if nextSession:
                speaker = nextSession.speaker
                sessions = Session.query(Session.speaker == speaker)
                sessionNames = [session.name for session in sessions]

        # fill speaker form
        speaker_form = SpeakerForm()
        for field in speaker_form.all_fields():
            if field.name ==  'sessionNames':
                setattr(speaker_form, field.name, sessionNames)
            elif field.name == 'speaker':
                setattr(speaker_form, field.name, speaker)
        speaker_form.check_initialized()
        return speaker_form
Ejemplo n.º 27
0
 def getSessionsAfterTimeExcludingType(self, request):
     """ This query returns sessions for given conference starting after given time,
         and excluding the given type. """
     # Solves the problem:
     # Let's say you dont like workshops and you sont like sessions before 7pm.
     #  How would you handle a query for all non-workshop sessions before 7 pm?
     #  is the problem for implementing this query? What ways to solve it did you think of?
     # Solution:
     #  The following query is my proposal. Ancestor query for time and typeOfSession (indexed).
     #  The encountered problem is "BadRequestError: Only one inequality filter per query is supported."
     #  which can be solved by using twp separate queries for each inequality, getting the intersection
     #  of the keys, and then retrieving the entities from the intersected keys.
     conf = ndb.Key(urlsafe=request.websafeConferenceKey).get()
     if not conf:
         raise endpoints.NotFoundException(
             'No conference found with key: %s' % request.websafeConferenceKey)
     if not request.date and request.date.time():
         raise endpoints.NotFoundException(
             'Query must include a valid date and time.')
     sessionsByTime = Session.query(Session.time >= request.date.time(),ancestor=conf.key)
     sessKeysByTime = sessionsByTime.fetch(None, keys_only=True)
     sessionsByType = Session.query(Session.typeOfSession != request.typeOfSession,ancestor=conf.key)
     sessKeysByType = sessionsByType.fetch(None, keys_only=True)
     validSessKeys  =  set(sessKeysByTime).intersection(set(sessKeysByType))
     sessions       = ndb.get_multi(validSessKeys)
     return SessionForms(
         items=[self._copySessionToForm(sess) for sess in sessions]
     )
Ejemplo n.º 28
0
def new_account(request):
    # pull out the POSTed fields
    username = request.POST.get('username', None)
    password = request.POST.get('password', None)
    person_name = request.POST.get('real_name', '')
    person_loc = request.POST.get('location', '')
    person_bio = request.POST.get('bio', '')
    person_img = request.POST.get('b64_img', '')

    # ensure both the username and password were given
    if username is None or password is None:
        return HttpResponseBadRequest("Missing username or password")
    
    # create a new account 
    u_norm = username.lower()
    p_hash = hash_password(password)
    n_account = Account(account_key=u_norm, passphrase=p_hash)
    n_account.save()
    # and then a profile for this new account
    n_profile = Profile(name=person_name, location=person_loc,
        bio=person_bio, img_data=person_img, account=n_account)
    n_profile.save()

    # create a session for the new account and send the key
    u_session = Session(key=session_hash(), account=n_account)
    u_session.save()
    return redirect('existing-session', key=u_session.key)
 def _cacheFeaturedSpeaker(self):
     """
     Create memcache for a featured Speaker of a conference.
     """
     # Get the conference that the speaker is speaking
     # at from the websafeKey provided in the request
     conf_k = ndb.Key(urlsafe=self.request.get('key'))
     conf = conf_k.get()
     # The speaker that was just added
     addedSpeaker = self.request.get('speaker')
     # Find the speaker in the most sessions giving a Confenence
     # and return (name, sessionsCount)
     featuredSpeaker = Session.countspeakers(conf_k)
     speakerName = featuredSpeaker[0]
     sessionsSpeakersIn = featuredSpeaker[1]
     speakerMemKey = SPEAKER_ANNOUNCEMENTS_KEY + self.request.get('key')
     # Query that gets the name of the sessions the features speaker
     sessionsInfo = [session.name for session in \
         Session.query(ancestor=conf_k, projection=[Session.name]).\
         filter(Session.speaker == speakerName)]
     # Turn array into string then remove []
     if sessionsSpeakersIn > 1 and speakerName == addedSpeaker:
         speaker = {
             "name": speakerName.title(),
             "conf_name": conf.name.title(),
             "sessions": sessionsInfo
         }
         memcache.add(key=speakerMemKey, value=speaker, time=600)
     else:
         # If no feature speaker
         speaker = ""
         memcache.delete(speakerMemKey)
     return speaker
Ejemplo n.º 30
0
    def post(self):
        game_id = self.get_argument('game_id')
        game_password = self.get_argument('game_password')
        username = self.get_argument('username')

        session = Session()
        try:
            user = get_user(username)
            game = get_game(game_id=game_id, game_password=game_password)
            try:
                usergame = get_usergame(user.id, game.id)
                if usergame is not None:
                    response_dict = get_response_dict(True)
            except NoResultFound:
                if not game.started:
                    game.add_user(user)
                    response_dict = get_response_dict(True)
                else:
                    response_dict = get_response_dict(False, 'Game has started; you cannot join.')
                    
        except Exception as e:
            session.rollback()
            response_dict = get_response_dict(False, e.message)
        finally:
            Session.remove()
            self.finish(simplejson.dumps(response_dict))
Ejemplo n.º 31
0
def login():
    # If the user is already logged in, just display the index
    if already_logged_in(request):
        flash('Already logged in.')
        return redirect(url_for('index'))

    if request.method == 'GET':
        return TemplateManager.get_login_template()
    else:
        username = request.form['username'].strip()
        otptoken = request.form['otptoken'].strip()
        password = request.form['password']

        user = User.check_password(username, password)
        if not user:
            return TemplateManager.get_login_template(
                ["Invalid Login or password"])

        match, used_recovery_code = user.verify_twofa(otptoken)
        if not match:
            return TemplateManager.get_login_template(
                ['2FA token invalid.'])

        result, session_token, csrf_token = Session.new_session(user)
        if not result:
            return TemplateManager.get_login_template(
                ["Could not create session"])

        # Make the response and set the cookie
        if used_recovery_code:
            url = url_for('retrieve_2fa_code')
        else:
            url = url_for('index')

        response = make_response(redirect(url, code=httplib.SEE_OTHER))
        set_cookie(response, Session.SESSION_KEY, session_token, app.config['MAX_SESSION_AGE'])
        return response
Ejemplo n.º 32
0
def response():
    if not current_user.is_anonymous():
        user_data = asana_api.exchange_token(current_user.refresh_token,
                                             "refresh_token")
        next = request.args.get("next", "/")
    elif not request.args.get("code"):
        return redirect(constants.AUTH_ENDPOINT +
                        "&state=%s" % request.args.get("next", "/"))
    else:
        user_data = asana_api.exchange_token(request.args.get("code"), "code")
        print 'user data:', user_data
        next = request.args.get("state", "/")
    s = Session()
    user = User.from_json(user_data)
    s.merge(user)
    login_user(user)
    s.commit()
    return redirect(next)
    def _setFeaturedSpeaker(self, websafeConferenceKey, websafeSpeakerKey,
                            speaker):
        """
        Input: websafeConferenceKey, websafeSpeakerKey, speaker
        Returns: Doesn't return anything
        Description: this method checks if the speaker has more than one sessions,
        within the same conference and adds a message in memcache mentioning the
        speaker name as featured speaker and session names he/she is delivering.

        NOTE: This method is being executed using taskqueue from
        SetFeaturedSpeakerHandler() in main.py
        """
        # ---------  add featured speaker to memcache -----------

        conf_key = ndb.Key(urlsafe=websafeConferenceKey)
        # Gets all the sessions for current Conference
        sessions = Session.query(ancestor=conf_key)
        # Filters the returned sessions based on speaker
        sessions = sessions.filter(
            Session.websafeSpeakerKey == websafeSpeakerKey)
        sessions = sessions.fetch()

        # Checks if the more than one sessions were returned for current
        # speaker
        if len(sessions) > 1:
            featuredSpeakerMessage = speaker + " is featured speaker " + \
                "and he will be delivering talk in following sessions. "
            sessionsCSV = ""
            # building a comma separated list of session names where featured
            # speaker is speaking
            for session in sessions:
                sessionsCSV += session.name + ", "

            featuredSpeakerMessage = featuredSpeakerMessage + \
                sessionsCSV[:-2] + "."

            memcache.set(MEMCACHE_FEATURED_SPEAKER_KEY, featuredSpeakerMessage)
Ejemplo n.º 34
0
    def SessionsBySpeakerOnSpecificDate(self, request):
        """Return Conference sessions by Speaker on a specific date."""

        # make sure user is authed
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        # user_id = getUserId(user)

        sp_lastName = request.lastName
        sp_firstName = request.firstName
        theDate = datetime.strptime(request.conferenceDate, "%Y-%m-%d").date()

        if sp_firstName:
            # find by first and last name
            speaker = Speaker.query(ndb.AND(
                Speaker.lastName == sp_lastName,
                Speaker.firstName == sp_firstName))
        else:
            # find by last name only
            speaker = Speaker.query(Speaker.lastName == sp_lastName)

        speaker_keys = [sp.key for sp in speaker]

        # iterate over each key finding all sessions
        all_sessions = []
        for sp_k in speaker_keys:
            sessions = Session.query(ndb.AND(
                Session.speaker == sp_k,
                Session.date == theDate))
            for s in sessions:
                all_sessions.append(s)

        # return list of sessions that match each of the speaker_keys
        return SessionForms(
            items=[self._copySessionToForm(sess) for sess in all_sessions]
        )
Ejemplo n.º 35
0
def toggle_default_platform(platform):
    """
    Toggle active state of platfrom for a game.
    :param game: - game name
    :param platform: - platform id (1 - windows, 2 - macos, 4 - linux)
    """
    app.logger.info("Requesting toggle of default platform: %s.", platform)
    _session = Session()
    _user = _session.query(User).one()
    _result = {}
    _platform_list = [1, 2, 4]
    _platform = int(platform)
    if _platform not in _platform_list:
        app.logger.error(
            "Unknown platform requested: %s", platform)
        return "Unknown platform requested", 400
    app.logger.info(
        "Requesting change of platform: %s.", platform)
    app.logger.debug("Current: %s", _user.platform)
    _state = _user.platform & _platform
    if _state == _platform:
        # Disable platform
        _mask = ~ _platform
        _user.platform = _user.platform & _mask
    else:
        _user.platform = _user.platform | _platform
    # Game in db - toggle platfrom
    db_games = _session.query(Game).filter(
        Game.platform_available.op('&')(_platform) == _platform).all()
    for db_game in db_games:
        # app.logger.debug("Game %s found in the DB.", game)
        if db_game.state == Status.running:
            return "Platform change during download is prohibited.", 400
        _selected = db_game.platform
        if _selected < 0:
            if (_user.platform & db_game.platform_available) != \
                    (db_game.platform_ondisk & _user.platform & db_game.platform_available) \
                    and db_game.state != Status.queued and \
                    db_game.state != Status.running:
                _result[db_game.name] = {'missing': True}
            else:
                _result[db_game.name] = {'missing': False}
    _session.commit()
    return jsonify(_result)
 def getConferenceSessionsByType(self, request):
     """
     Given a conference, return all sessions of a specified type
     (eg lecture, keynote, workshop)
     """
     key = ndb.Key(urlsafe=request.websafeConferenceKey)
     conf = key.get()
     value = request.value.upper()
     if not conf:
         raise endpoints.NotFoundException(
             'No conference found with key: %s' % key)
     # Check if field and operation are valid
     if request.field != "TYPE" or request.operator not in OPERATORS:
         raise endpoints.NotFoundException(
             'Can only filter by type or check operator')
     # Check if value is valid
     if value not in TypeOfSession.to_dict():
         raise endpoints.NotFoundException('Not a valid session type')
     sessions = Session.query(ancestor=key).\
         filter(ndb.query.FilterNode(FIELDS[request.field],\
         OPERATORS[request.operator], value)).\
         order(Session.startTime)
     return SessionForms(sessions=[self._copySessionToForm(sess)\
                         for sess in sessions])
Ejemplo n.º 37
0
    def getConferenceSessionsByDate(self, request):
        """Given a conference and a date, return all sessions,
        ordered by session start time."""
        # get Conference object from request; bail if not found
        conf = ndb.Key(urlsafe=request.websafeConferenceKey).get()
        if not conf:
            raise endpoints.NotFoundException(
                'No conference found with key: %s' %
                request.websafeConferenceKey)

        # convert date from string to Date object;
        queryDate = datetime.strptime(request.dateOfSession[:10],
                                      "%Y-%m-%d").date()

        # create ancestor query for all key matches for this conference
        sessions = Session.query(ancestor=ndb.Key(
            urlsafe=request.websafeConferenceKey))
        # filter sessions by dateOfSession
        sessions = sessions.filter(Session.date == queryDate)
        # order sessions by startTime
        sessions = sessions.order(Session.startTime)
        # return set of SessionForm objects per Session
        return SessionForms(
            items=[self._copySessionToForm(sess) for sess in sessions])
Ejemplo n.º 38
0
    def getConferenceSessionsByType(self, request):
        """Given a conference, return all sessions of a specified type"""
        data = {
            field.name: getattr(request, field.name)
            for field in request.all_fields()
        }
        typeOfSession = data['typeOfSession']

        # Get conference by key
        conf = ndb.Key(urlsafe=request.websafeConferenceKey).get()

        # If no conference exists with that key, error out.
        if not conf:
            raise endpoints.NotFoundException(
                'No conference found with key: %s' %
                request.websafeConferenceKey)

        # Search for all sessions where ancestor is this conference
        sessions = Session.query(Session.typeOfSession == typeOfSession,
                                 ancestor=ndb.Key(Conference, conf.key.id()))

        # Return SessionForm objects
        return SessionForms(
            items=[self._copySessionToForm(session) for session in sessions])
    def querySessionByTypeAndStartTime(self, request):
        """
        querySessionByTypeAndStartTime solves the multiple inequality problem by
        first retrieving the sessions filtered by typeOfSession requested by
        client and then iterates through the results to check startTime which is
        lesser than the provided startTime
        Returns the resulting sessions in SessionForms
        """
        sessions = Session.query()
        # Filters session on typeOfSession
        sessions = sessions.filter(
            Session.typeOfSession != request.typeOfSession)

        # Checks if each session has startTime lower than the provided
        # startTime
        sessionsBeforeTime = [
            session for session in sessions
            if session.startTime < request.startTime
        ]

        # return individual SessionForm object per Session
        return SessionForms(sessions=[
            self._copySessionToForm(session) for session in sessionsBeforeTime
        ])
Ejemplo n.º 40
0
 def _getSessionsQuery(self, inequality_field, filter_set, conf_key):
     """ Return formatted query from the submitted filters for Sessions. 
         This is the function where we query all equality filters and
         the first inequality filter. We can only do one inequality
         operation for one filter query.
     """
     # Get query object for all sessions for a particular conference
     s = Session.query(ancestor=conf_key)
     # If we don't have an inequality filter,
     # If we have an inequality filter, then order by that property first
     # This is a requirement in ndb. First order by the property that we
     # are going to do the inequality filtering.
     if not inequality_field:
         s = s.order(Session.name)
     else:
         s = s.order(ndb.GenericProperty(inequality_field))
         s = s.order(Session.name)
     for filtr in filter_set:
         # format the values in the filter (for date, time, and duration which is an int)
         if filtr["field"] == "start_time":
             print "this is the value: ", filtr["value"]
             value = datetime.strptime(filtr["value"][:10], "%H:%M")
             print "Formatting the start time field: ", value
         elif filtr["field"] == "date":
             value = datetime.strptime(filtr["value"][:10], "%Y-%m-%d")
             print "Formatting the date: ", filtr["value"]
         elif filtr["field"] == "duration":
             value = int(filtr["value"])
         else:
             value = filtr["value"]
             print "Post formatting, the filters are: ", filtr
         # Get the filter node for that particular filter
         formatted_query = ndb.query.FilterNode(filtr["field"],
                                                filtr["operator"], value)
         s = s.filter(formatted_query)
     return s
Ejemplo n.º 41
0
    def getConferenceSessions(self, request):
        """Given a conference, returns all sessions."""

        # copy the ConferenceForm/ProtoRPC Message into a dict object
        data = {
            field.name: getattr(request, field.name)
            for field in request.all_fields()
        }

        # get the existing conference
        conf = ndb.Key(urlsafe=request.websafeConferenceKey).get()

        # check to see if that conference exists
        if not conf:
            raise endpoints.NotFoundException(
                'Sorry but, no conference found with the key: %s' %
                request.websafeConferenceKey)

        # create query for all key matches for this conference
        sessions = Session.query(ancestor=ndb.Key(Conference, conf.key.id()))

        # return SessionForm objects per Session
        return SessionForms(
            items=[self._copySessionToForm(session) for session in sessions])
Ejemplo n.º 42
0
    def getConferenceSessionsByType(self, request):
        """Return all sessions of a conference by the type of session"""

        data = {
            field.name: getattr(request, field.name)
            for field in request.all_fields()
        }
        typeOfSession = data['typeOfSession']

        #fetch conference from key
        conf = ndb.Key(urlsafe=request.websafeConferenceKey).get()

        #Check that conference exists
        if not conf:
            raise endpoints.NotFoundException(
                'No conference found with this key: %s' %
                request.websafeConferenceKey)

        #Create ancestor query for all key matches for this conference
        sessions = Session.query(Session.typeOfSession == typeOfSession,
                                 ancestor=conf.key)

        return SessionForms(
            items=[self._copySessionToForm(session) for session in sessions])
Ejemplo n.º 43
0
def login():
    if request.method == 'POST':
        errors = []
        username = request.form.get('username')
        password = request.form.get('password')

        if not username and password:
            errors.append('Missing required username or password field')

        try:
            user = User(username=username)
            user.authenticate(password=password)
        except AuthenticationError, e:
            errors.append(e)

        if not errors:
            next = request.form.get('next', '/')
            response = make_response(redirect(next))

            session = Session(user_id=user.user_id)
            response.set_cookie('session', value=session.session_id)
            return response
        else:
            return render_template("login.html", errors=errors)
Ejemplo n.º 44
0
 def getConferenceSessions(self, request):
     """Given a conference, return all sessions."""
     # Ensure that user is authed
     user = endpoints.get_current_user()
     if not user:
         raise endpoints.UnauthorizedException('Authorization Required')
     # Retrieve the Conference key
     try:
         c_key = ndb.Key(urlsafe=request.websafeConferenceKey)
     except Exception:
         raise endpoints.BadRequestException(
             'The websafeConferenceKey given is invalid.')
     # Verify that the Conference exists
     conf = c_key.get()
     if not conf:
         raise endpoints.NotFoundException(
             'No conference found for the key provided: %s' %
             request.websafeConferenceKey)
     # Store the Sessions that are ancestors of the Conference
     sessions = Session.query(ancestor=c_key)
     # Return a SessionForm for each Session
     return SessionForms(items=[
         self._copyConferenceSessionToForm(sesh) for sesh in sessions
     ])
    def getNonWorkshopsBefore7(self, request):
        """Return sesssions where the title or the highlights
        contain the given topic keyword.
        """
        # NOTE: we want "localTime < 7pm and session is not a workshop",
        # however, we can only have one inequality per query, so we
        # query on time first (so that we can sort on it), and then
        # filter the workshop sessions out with an in-memory loop.
        # ALSO NOTE that we allow None session types and times through.
        sevenPM = time(19)
        sessions = Session.query(not Session.localTime or Session.localTime <= sevenPM) \
                          .order(Session.localTime)

        result = []
        for session in sessions:
            # skip workshop sessions
            if session.typeOfSession and session.typeOfSession == 'WORKSHOP':
                continue
            result.append(session)

        # return set of ConferenceForm objects per Conference
        return SessionForms(
            items=[self._copySessionToForm(session) for session in result]
        )
Ejemplo n.º 46
0
    def decorated_function(*args, **kwargs):
        access_token = request.headers.get('Authorization')
        if access_token is not None:  
            try:
                payload = jwt.decode(access_token, SECRET_KEY, ALGORITHM)
            except jwt.InvalidTokenError:
                 payload = None

            if payload is None:
                raise GraphQLError('Invalid_Token')
            
            user_id = payload
            master = Session.query(User).filter_by(id=user_id['user_id']).first()
            
            if master.is_master == 1:
                g.master_id = user_id
                
            else:
                raise GraphQLError('Not_Master_Token')
            
        else:
            raise GraphQLError('Invalid_Token')

        return func(*args, **kwargs)
Ejemplo n.º 47
0
    def getConferenceSessions(self, request):
        """Given a conference, returns all sessions."""

        # copy ConferenceForm into dict
        data = {
            field.name: getattr(request, field.name)
            for field in request.all_fields()
        }

        # get existing conference
        conf = ndb.Key(urlsafe=request.websafeConferenceKey).get()

        # check that this conference exists
        if not conf:
            raise endpoints.NotFoundException(
                'No conference found with key: %s' %
                request.websafeConferenceKey)

        # create a query that returns all sessions descended from this ancestor conference
        sessions = Session.query(ancestor=ndb.Key(Conference, conf.key.id()))

        # return the set of SessionForm objects per Session
        return SessionForms(
            items=[self._copySessionToForm(session) for session in sessions])
Ejemplo n.º 48
0
    def getConferenceSessions(self, request):
        """Return sessions for a Conference (by websafeConferenceKey)."""
        # make sure user is authed
        user = endpoints.get_current_user()
        if not user:
            raise endpoints.UnauthorizedException('Authorization required')
        # user_id = getUserId(user)
        wsck = request.websafeConferenceKey
        try:
            conf = ndb.Key(urlsafe=wsck).get()
        except:
            conf = None

        if not conf:
            raise endpoints.NotFoundException(
                'No conference found for key: %s' % wsck)

        # create ancestor query for all key matches for this conference
        sessions = Session.query(ancestor=conf.key)

        # return set of SessionForm objects for conference
        return SessionForms(
            items=[self._copySessionToForm(session) for session in sessions]
        )
Ejemplo n.º 49
0
    def task3Test(self, request):
        """an endpoint just to test solutions for project's Task 3"""
        # first query is a simple property filter
        # second query more problematic...how to compare TimeProperties?

        # this solution did not work; datastore not correctly comparing time obj
        # good_sessions = Session.query(Session.typeOfSession != 'Workshop')
        # cutoff = time(19)
        # print 'HEY cutoff time is %s', cutoff
        # good_sessions.filter(Session.startTime < cutoff)

        # this solution works but may be problematic performance-wise
        good_sessions = Session.query(
            Session.typeOfSession != 'Workshop').fetch()
        if good_sessions:
            cutoff = time(19)
            good_sessions = [
                session for session in good_sessions
                if session.startTime < cutoff
            ]

        return SessionForms(items=[
            self._copySessionToForm(session) for session in good_sessions
        ])
Ejemplo n.º 50
0
    def querySessionTime(self, request):
        """Return sessions given a conference object, time and type"""
        # get conference object from Datastore
        conf = self._getDataStoreObject(request.websafeConferenceKey)
        # query sessions using ancestor conf Key, order sessions by start time
        sessions = Session.query(ancestor=conf.key).order(Session.startTime)

        # filter sessions by time (before/after/equal certain time)
        if (request.operator and request.time):
            node = ndb.query.FilterNode(
                                    'startTime',
                                    OPERATORS[request.operator],
                                    datetime(1970, 01, 01, request.time, 00))
            sessions = sessions.filter(node)
        else:
            raise endpoints.BadRequestException("You need to define both "
                                                "operator and time")

        # only return session types that are not equal to what the user provided
        return SessionForms(
            items=[self._copySessionToForm(x)
                   for x in sessions
                   if x.sessionType != request.sessionType]
        )
Ejemplo n.º 51
0
    def _getSessionQuery(self, request):
        """Return formatted query from the submitted filters.
        """

        q = Session.query()
        inequality_filter, filters = self._formatSessionFilters(
            request.filters)

        # If exists, sort on inequality filter first
        if not inequality_filter:
            q = q.order(Session.name)
        else:
            q = q.order(ndb.GenericProperty(inequality_filter))
            q = q.order(Session.name)

        for filtr in filters:
            if filtr["field"] in ["durationInMinutes"]:
                filtr["value"] = int(filtr["value"])
            formatted_query = ndb.query.FilterNode(
                filtr["field"], 
                filtr["operator"], 
                filtr["value"])
            q = q.filter(formatted_query)
        return q
Ejemplo n.º 52
0
    def process_item(self, item, spider):
        """Save courses and sessions in the database.

        This method is called for every item pipeline component.

        """

        # TODO: Find a way to update rather than over write all the data
        # http://stackoverflow.com/questions/2546207/does-sqlalchemy-have-an-equivalent-of-djangos-get-or-create
        db_session = self.Session()

        course_data = {
            'number': item['number'],
            'title': item['title'],
            'deptTitle': item['deptTitle'],
            'department': item['department']
        }

        course = Course(**course_data)

        sessions_data = item['sessions']
        for session_data in sessions_data:
            session = Session(**session_data)
            course.sessions.append(session)

        try:
            db_session.add(course)
            # db_session.merge(course)
            db_session.commit()
        except:
            db_session.rollback()
            raise
        finally:
            db_session.close()

        return item
Ejemplo n.º 53
0
def scan_token(start):
    tokenAddr = {
        "lead": "0x2866a32f364b67437c442f5a15fdc992be83cd6f",
        "beer": "0x3870c14F5a2Da7b67353831C33477E889C6e841D",
    }
    heco = HecoApi("http://192.168.1.123:16909/")
    block_number = heco.get_block_number()
    if block_number <= 0:
        return
    session = Session()
    for i in range(start, block_number + 1):
        block = heco.get_block(i, True)
        block_time = int(block['timestamp'], 16)
        for t in block['transactions']:
            token = get_token(t['to'])
            if token == "":
                continue
            try:
                if t['input'].startswith('0xc00007b'):
                    receipt = heco.get_tx_receipt(t['hash'])
                    level = 0
                    sub = ""
                    for l in receipt['logs']:
                        if l['address'].lower() == tokenAddr[token].lower():
                            session.add(
                                HecoSwapReward(
                                    symbol=token,
                                    blockNum=i,
                                    blockTime=block_time,
                                    addr='0x' + l['topics'][2][25:],
                                    reward=f"{int(l['data'], 16)/10**18:>.6f}",
                                    sub=sub,
                                    subLevel=level))
                            print(block_time, '0x' + l['topics'][2][25:],
                                  int(l['data'], 16) / 10**18)
                        if level == 0:
                            sub = l['address']
                        level += 1
                    session.commit()
            except Exception as e:
                print(str(e))
        if i % 1000 == 0:
            print(i)
Ejemplo n.º 54
0
    def post(self):
        '''接收用户提交的信息,写入到数据库'''
        nickname = self.get_argument('nickname')
        password = self.get_argument('password')
        gender = self.get_argument('gender')
        city = self.get_argument('city')
        bio = self.get_argument('bio')
        '''产生安全密匙'''
        safe_password = self.gen_password(password)

        #将用户数据写入数据库
        session = Session()
        user = User(nickname=nickname,password=safe_password,
                    gender=gender,city=city,bio=bio)
        session.add(user)
        session.commit()

        '''注册完成跳转到登陆界面'''
        self.redirect('/user/login')
Ejemplo n.º 55
0
def import_index_history_ohlcv():
    indices = ['000001', '399001', '399006', '000016']
    for i in indices:
        datas = read_tdx_ohlcv('../data/index_history/%s.txt' % i)
        records = [
            IndexOhlcv(code=i,
                       datetime=data[0],
                       period='d',
                       open=data[1],
                       high=data[2],
                       low=data[3],
                       close=data[4],
                       volume=data[5],
                       amount=data[6]) for data in datas
        ]

        ss = Session()
        ss.add_all(records)
        ss.commit()
Ejemplo n.º 56
0
    def post(self):
        # 获取参数
        content = self.get_argument('content')  # 回复内容
        cmt_id = int(self.get_argument('cmt_id'))  # 所回复的原评论的 ID
        wb_id = int(self.get_argument('wb_id'))  # 对应的微博 ID
        user_id = int(self.get_cookie('user_id'))  # 当前用户的 ID

        # 添加数据
        session = Session()
        comment = Comment(user_id=user_id,
                          wb_id=wb_id,
                          cmt_id=cmt_id,
                          content=content,
                          created=datetime.datetime.now())
        session.add(comment)
        session.commit()

        # 发表完回复以后,页面回到原微博下
        return self.redirect('/weibo/show?weibo_id=%s' % wb_id)
Ejemplo n.º 57
0
def main():
    session = Session()

    f = codecs.open('data/u.item', 'r', 'utf-8', 'ignore')
    for line in f:
        cols = [c.strip() for c in line.strip().split('|')]
        assert len(cols) == 24

        item = Item()
        item.dataset = Item.DATASET_MOVIELENS_100K

        key = cols[0]
        item.key = key

        name, year = _extract_name_and_year(cols[1], key)
        if name is None:
            raise Exception('Can\'t split name and year from 2nd column')
        item.name = name
        item.year = year

        release_date = _get_date(cols[2])
        item.release_date = release_date

        video_release_date = _get_date(cols[3])
        item.video_release_date = video_release_date

        old_imdb_url = cols[4]
        item.old_imdb_url = old_imdb_url

        # category가 unknown인 경우, 다른 valid한 category가 없어야 합니다.
        if cols[5] == '1':
            assert sum(int(d) for d in cols[6:]) == 0

        for j, key in zip(range(6, 24), [
                'action', 'adventure', 'animation', 'children', 'comedy',
                'crime', 'documentary', 'drama', 'fantasy', 'flim_noir',
                'horror', 'musical', 'imystery', 'romance', 'sci_fi',
                'thriller', 'war', 'western'
        ]):
            bool_value = (int(cols[j]) == 1)
            setattr(item, 'category_{}'.format(key), bool_value)
        session.add(item)
    session.commit()
Ejemplo n.º 58
0
def main():
    session = Session()

    for idx, item in enumerate(
            session.query(Item).filter(
                Item.price.is_(None),
                Item.rotten_movie_id.isnot(None), )):
        # if rotten_movie.id < 1623:
        #     continue

        print(">>", item.id)

        rotten_movie = item.rotten_movie
        if not rotten_movie:
            continue

        amazon_movie = rotten_movie.amazon_movie
        apple_movie = rotten_movie.apple_movie
        if not apple_movie and not amazon_movie:
            continue

        prices = []
        if amazon_movie:
            prices.append(amazon_movie.get_price())
        if apple_movie:
            prices.append(apple_movie.price)
        prices = [p for p in prices if p and p > 0.0]
        if not prices:
            continue

        price = sum(prices) / len(prices)
        item.price = price

        if idx % 100 == 0:
            session.commit()
    session.commit()
Ejemplo n.º 59
0
 def delete_session(self, args, guild, channel, sc, user):
     messages = []
     search = ''
     if len(args) == 1:
         if not sc:
             raise Exception('No session provided for deletion')
     else:
         search = ' '.join(args[1:])
         sc = Session().find(guild.name, str(channel.id), search)
     if not sc:
         return [f'{search} was not found. No changes made.']
     else:
         search = str(sc.name)
         channel_id = str(sc.channel_id) if sc.channel_id else ''
         sc.character.archive(user)
         sc.archived = True
         sc.updated_by = str(user.id)
         sc.updated = T.now()
         sc.save()
         messages.append(f'***{search}*** removed')
         if channel_id:
             channel = Channel().get_by_id(channel_id)
             messages.append(channel.get_string())
         return messages
Ejemplo n.º 60
0
def plc_client(ip, rack, slot, plc_id):
    """
    建立plc连接的上下文管理器
    :param ip: 
    :param rack: 
    :param slot: 
    :return: 
    """
    client = Client()
    try:
        client.connect(ip, rack, slot)
    except Snap7Exception as e:
        logging.warning('连接plc失败' + str(e))
        session = Session()
        id_num = r.get('id_num')
        alarm = connect_plc_err(id_num, plc_id)
        session.add(alarm)
        session.commit()
    yield client
    client.disconnect()
    client.destroy()