def _handle_timeline_notification(self, data): """Handle timeline notification. This method handles when a user chooses to perform a custom menu optio (increment, decrement, reset). """ # TODO: Race conditions occur if a user rapidly selects a menu item many # times (concurrently reading and writing the same timeline item). # Resolve this issue for user_action in data.get('userActions', []): logging.info(user_action) option = user_action.get('payload') if user_action.get( 'type') == 'CUSTOM' and option in PROCESS_OPTIONS: data = json.loads(self.request.body) item = self.mirror_service.timeline().get( id=data['itemId']).execute() num = util.get_num(custom_item_fields.get(item, 'num')) # possible actions are functions listed in PROCESS_OPTIONS custom_item_fields.set(item, 'num', PROCESS_OPTIONS[option](num), TIMELINE_ITEM_TEMPLATE_URL) if 'notification' in item: item.pop('notification') self.mirror_service.timeline().update(id=data['itemId'], body=item).execute() # Only handle the first successful action. break else: logging.info( "I don't know what to do with this notification: %s", user_action)
def _handle_timeline_notification(self, data): """Handle timeline notification. This method handles when a user chooses to perform a custom menu optio (increment, decrement, reset). """ # TODO: Race conditions occur if a user rapidly selects a menu item many # times (concurrently reading and writing the same timeline item). # Resolve this issue for user_action in data.get('userActions', []): logging.info(user_action) option = user_action.get('payload') if user_action.get('type') == 'CUSTOM' and option in PROCESS_OPTIONS: data = json.loads(self.request.body) item = self.mirror_service.timeline().get(id=data['itemId']).execute() num = util.get_num(custom_item_fields.get(item, 'num')) # possible actions are functions listed in PROCESS_OPTIONS custom_item_fields.set( item, 'num', PROCESS_OPTIONS[option](num), TIMELINE_ITEM_TEMPLATE_URL) if 'notification' in item: item.pop('notification') self.mirror_service.timeline().update( id=data['itemId'], body=item).execute() # Only handle the first successful action. break else: logging.info( "I don't know what to do with this notification: %s", user_action)
def _new_counter(self): """Insert a timeline item.""" logging.info('Inserting timeline item') # Note that icons will not show up when making counters on a # locally hosted web interface. body = { 'notification': {'level': 'DEFAULT'}, 'menuItems': [ { 'action': 'CUSTOM', 'id': 'increment', 'values': [{ 'displayName': 'Increment', 'iconUrl': util.get_full_url( self, '/static/images/up.png')}] }, { 'action': 'CUSTOM', 'id': 'decrement', 'values': [{ 'displayName': 'Decrement', 'iconUrl': util.get_full_url( self, '/static/images/down.png')}] }, { 'action': 'CUSTOM', 'id': 'reset', 'values': [{ 'displayName': 'Set Counter to 0', 'iconUrl': util.get_full_url( self, '/static/images/reset.png')}] }, {'action': 'SHARE'}, {'action': 'TOGGLE_PINNED'}, {'action': 'DELETE'} ] } new_fields = { 'name': self.request.get('name'), 'num': util.get_num(self.request.get('num')) } custom_item_fields.set_multiple( body, new_fields, TIMELINE_ITEM_TEMPLATE_URL) # self.mirror_service is initialized in util.auth_required. self.mirror_service.timeline().insert(body=body).execute() # Subscribe to timeline notifications if not yet subscribed. A # subscription should have been made during initial OAuth grant # but user could have unsubscribed via /subscription for debugging. try: self._subscribe() except HttpError: return ( 'A counter was made but ' 'Notifications were not enabled because an HTTP Error occured. ' 'A common cause of this problem is not using an HTTPS connection.' ) return 'A new counter has been created.'
def __enter__(self): o, e = self.tentacle.cmd(self.cmd + ' &', expect=self.ready_pattern, timeout=self.timeout) self.pid = util.get_num('\[\d+\] +(\d+)', o) if self.pid is None: util.print_error('Fail to get process id for "%s"' % self.cmd) self.o += o self.e += e return self
def _update_counter(self): """Updates the counter to user input for given timeline item.""" item = self.mirror_service.timeline().get( id=self.request.get('itemId')).execute() new_fields = { 'name': self.request.get('name'), 'num': util.get_num(self.request.get('num')) } custom_item_fields.set_multiple( item, new_fields, TIMELINE_ITEM_TEMPLATE_URL) if 'notification' in item: item.pop('notification') self.mirror_service.timeline().update( id=self.request.get('itemId'), body=item).execute() return 'Counter Updated'
import math as m import util def is_prime(n): """Determine whether n is prime using Wilson's Theorem""" return m.factorial(n - 1) % n == (-1) % n def display_primality(n): """Display the primality of n""" if is_prime(n): print("{0} is a prime number".format(n)) else: print("{0} is a composite number".format(n)) if __name__ == '__main__': num = util.get_num(lim=1) display_primality(num)