class UserRemoval(BasicModel): email = ndb.StringProperty() status = ndb.StringProperty(choices=('Approve', 'Cancel', 'Pending'), default='Pending') @classmethod def list_all(cls): return cls.query() @classmethod def list_all_pending(cls): return cls.query().filter(cls.status == 'Pending') @classmethod def list_all_approve(cls): return cls.query().filter(cls.status == 'Approve') @classmethod def create(cls, params): try: key = ndb.Key(cls, params['email']) if key.get() is None: cls(key=key, email=params['email']).put() except Exception, e: return e
class SpeakerQuestion(BasicModel): question_id = ndb.StringProperty(required=True) sender_name = ndb.StringProperty() sender_email = ndb.StringProperty() sender_question = ndb.StringProperty() sender_university = ndb.LocalStructuredProperty( University ) has_been_revised = ndb.BooleanProperty(default=False)
class Video(BasicModel): resource_id = ndb.IntegerProperty(required=True) title = ndb.StringProperty() description = ndb.StringProperty() url_where_to_donwload = ndb.StringProperty() thumbnail_url = ndb.StringProperty() extension = ndb.StringProperty( choices=( 'mp4','mkv','avi','flv' ) )
class EventPerson(BasicModel): event_person_id = ndb.IntegerProperty(required=True) market_place_person_id = ndb.IntegerProperty() first_name = ndb.StringProperty() last_name = ndb.StringProperty() picture_url = ndb.StringProperty() emails = ndb.StringProperty(repeated=True)
class Speaker(EventPerson): facebook_account = ndb.StringProperty() linkedin_account = ndb.StringProperty() twitter_account = ndb.StringProperty() biography = ndb.TextProperty() biography_url = ndb.StringProperty() company = ndb.StringProperty() #---------------------------------------- speaker_questions = ndb.LocalStructuredProperty( SpeakerQuestion )
class ServiceAccountSettings(SettingModel): _name = 'OAuth2 Service Account' _settings_key = 'oauth2_service_account' domain = ndb.StringProperty(indexed=False, verbose_name="The Google Apps Domain") default_user = ndb.StringProperty( indexed=False, verbose_name="The email of the user to impersonate by default") client_email = ndb.StringProperty( indexed=False, verbose_name="*****@*****.**") private_key = ndb.TextProperty(verbose_name="PEM Format")
class AuthModel(BasicModel): object_key = ndb.KeyProperty(required=False) code = ndb.StringProperty(indexed=True, required=True) code_last_refreshed = ndb.DateTimeProperty(required=False) temporary_code = ndb.StringProperty(indexed=True, required=False) token = ndb.StringProperty(indexed=True, required=False) token_last_refreshed = ndb.DateTimeProperty(required=False) def all(cls): return cls.query() @classmethod def delete(cls, key): logging.info(key) obj = AuthModel.query(AuthModel.object_key == key).get() obj.key.delete()
class AgendaItem(BasicModel): title = ndb.StringProperty(required=True) start_datetime = ndb.DateTimeProperty() end_datetime = ndb.DateTimeProperty() active = ndb.BooleanProperty() #---------------------------------------- speakers = ndb.LocalStructuredProperty( Speaker , repeated=True )
class Account(BasicModel): first_name = ndb.StringProperty(indexed=True) last_name = ndb.StringProperty(indexed=True) email = ndb.StringProperty(indexed=True) password = ndb.StringProperty(indexed=False) is_seller = ndb.BooleanProperty(indexed=False, default=False) def __repr__(self): return '%s %s' % (self.first_name, self.last_name) @classmethod def list_all(cls): return cls.query() @classmethod def create(cls, params): item = cls() item.populate(**params) item.put() return item @classmethod def remove(cls): ndb.delete_multi( Account.query().fetch(keys_only=True) ) @classmethod def get(cls, key_name=None): if key_name: return cls.find_by_email(key_name) else: return None @staticmethod def transform_message(entity): return EventMessage( key=entity.key.urlsafe(), first_name=entity.first_name, last_name=entity.last_name, email=entity.email )
class ProcessedUsers(Model): eventId = ndb.StringProperty() resource = ndb.StringProperty() @classmethod def list_all(cls): return cls.query() @classmethod def create(cls, params): item = cls(id=params.get('eventId')) item.populate(**params) item.put() return item @classmethod def remove(cls, params): ndb.delete_multi( cls.query(cls.resource == params['resource']).fetch( keys_only=True))
class GeneralEvent(BasicModel): event_id = ndb.IntegerProperty(required=True) keyname = ndb.StringProperty(required=True) name = ndb.StringProperty() privacy = ndb.StringProperty( choices=( 'Private','Public','Secret' ) ) picture = ndb.StringProperty() start_datetime = ndb.DateTimeProperty() end_datetime = ndb.DateTimeProperty() languages = ndb.StringProperty( choices=( 'English','Spanish','Portugese' ) ) location = ndb.StringProperty() active = ndb.BooleanProperty() #agenda_items = ndb.LocalStructuredProperty( AgendaItem , repeated=True ) #participants = ndb.StructuredProperty( Participant , repeated=True ) #anchors = ndb.StructuredProperty( Anchor , repeated=True ) description = StringTranslationProperty() title = ChoiceTranslationProperty( choices= { 'choice1': { 'spanish': 'mango', 'english': 'mangon', }, 'choice2': { 'spanish': 'tomate', 'english': 'tomato', }, 'choice3': { 'spanish': 'pollo', 'english': 'chicken', } })
class Subscription(BasicModel): premium = ndb.KeyProperty(kind="Account", indexed=True) email = ndb.StringProperty(required=True, indexed=True) first_name = ndb.StringProperty(indexed=False) last_name = ndb.StringProperty(indexed=False) subscription = ndb.StringProperty(indexed=False) @classmethod def list_all(cls): return cls.query() @classmethod def create(cls, params): params['premium'] = ndb.Key(urlsafe=params['premium']) item = cls() item.populate(**params) item.put() return item @classmethod def remove(cls): ndb.delete_multi(Subscription.query().fetch(keys_only=True))
class DeprovisionedAccount(BasicModel): status = ndb.BooleanProperty() email = ndb.StringProperty() @classmethod def list_all(cls): return cls.query() @classmethod def create(cls, params): item = cls() item.populate(**params) item.put() return item @classmethod def remove(cls): ndb.delete_multi(DeprovisionedAccount.query().fetch(keys_only=True)) @staticmethod def remove_owner_failed_notification(selectedEmail, event_summary, event_link): subject = "Arista Inc. - An attempt to remove an Owner of a Calendar Event has failed. " body = """ Hello, This notice is to let you know that user "%s", the owner of the "%s" event, has failed to be removed due to having participants on the event. Please review this event and make different plans if necessary. %s Thanks, Arista IT """ % (selectedEmail, event_summary, event_link) mail.send_mail(oauth_config['default_user'], notifications_recipient['email'], subject, body) @staticmethod def remove_owner_success_notification(selectedEmail, event_summary, event_link): subject = "Arista Inc. - Owner of a calendar event has been successfully removed." body = """ Hello, This notice is to let you know that "%s" the owner of the "%s" has been removed from our systems. Please review this event and make different plans if necessary. %s Thanks, Arista IT """ % (selectedEmail, event_summary, event_link) mail.send_mail(oauth_config['default_user'], notifications_recipient['email'], subject, body) @staticmethod def deprovision_success_notification(selectedEmail): subject = "Arista Inc. - %s has been successfully removed." % selectedEmail body = """ Hello, This notice is to let you know that "%s" has been removed from our systems. Thanks, Arista IT """ % selectedEmail mail.send_mail(oauth_config['default_user'], notifications_recipient['email'], subject, body)
class MailingList(Model): email = ndb.StringProperty() @classmethod def list_all(cls): return cls.query()
class University(BasicModel): acronym = ndb.StringProperty(required=True) name = ndb.StringProperty() description = ndb.TextProperty()
class Ticket(BasicModel): event = ndb.KeyProperty(kind='Event', indexed=True) scalper_name = ndb.KeyProperty(kind='Account', indexed=True) ticket_img = ndb.BlobKeyProperty() ticket_url = ndb.StringProperty(indexed=True) section = ndb.StringProperty(indexed=True) quantity = ndb.IntegerProperty(indexed=True) price = ndb.FloatProperty(indexed=True) sold = ndb.BooleanProperty(default=False, indexed=True) @classmethod def list_all(cls): return cls.query(cls.sold == False).order(cls.price) @classmethod def list_per_user(cls, key): csas = cls.query(cls.scalper_name == key).order(cls.price) tickets = [cls.buildTicket(ticket) for ticket in csas] return CompletedTickets(tickets=tickets) @classmethod def create(cls, params): params['event'] = ndb.Key(urlsafe=params['event']) # params['ticket_number'] = IdTracker.generate_number('ticket') item = cls() item.populate(**params) item.put() return item @classmethod def remove(cls): ndb.delete_multi( Ticket.query().fetch(keys_only=True) ) @classmethod def find_tickets(cls, key): csas = cls.find_all_by_event(key).filter(cls.sold == False).order(cls.price) tickets = [cls.buildTicket(ticket) for ticket in csas] return CompletedTickets(tickets=tickets) @classmethod def to_message(cls, entity): tickets = [cls.buildTicket(entity)] return CompletedTickets(tickets=tickets) @classmethod def buildTicket(cls, ticket): return TicketMessage( key=ticket.key.urlsafe(), section=ticket.section, quantity=ticket.quantity, price=ticket.price, scalper_name=cls.buildScalpers(ticket.scalper_name.get()), sold=ticket.sold, event=Event.buildEvent(ticket.event.get()) ) @classmethod def buildScalpers(cls, name): return ScalperMessage( key=name.key.urlsafe(), first_name=name.first_name, last_name=name.last_name, email=name.email )
class Anchor(EventPerson): facebook_account = ndb.StringProperty() twitter_account = ndb.StringProperty() biography = ndb.TextProperty() career = ndb.StringProperty()
class SocialLogin(SettingsModel): _name = 'SocialLogin' _settings_key = 'oauth2' _description = """ Control use of social login """ enable_login = ndb.BooleanProperty(indexed=False, default=True) fb_api_key = ndb.StringProperty(indexed=False) fb_secret = ndb.StringProperty(indexed=False) # # This gets used in emails # settings['app_name'] = {'APP_NAME'} # # settings['app_config'] = { # 'webapp2_extras.sessions': { # # WebApp2 encrypted cookie key # # You can use a UUID generator like http://www.famkruithof.net/uuid/uuidgen # 'secret_key': '_PUT_KEY_HERE_YOUR_SECRET_KEY_', # }, # 'webapp2_extras.auth': { # 'user_model': 'plugins.custom_auth.models.user.User', # 'user_attributes': ['email'], # } # } # # # Password AES Encryption Parameters # # aes_key must be only 16 (*AES-128*), 24 (*AES-192*), or 32 (*AES-256*) bytes (characters) long. # settings['aes_key'] = "12_24_32_BYTES_KEY_FOR_PASSWORDS" # settings['salt'] = "_PUT_SALT_HERE_TO_SHA512_PASSWORDS_" # # # get your own consumer key and consumer secret by registering at https://dev.twitter.com/apps # # callback url must be: http://[YOUR DOMAIN]/login/twitter/complete # settings['twitter_consumer_key'] = 'TWITTER_CONSUMER_KEY' # settings['twitter_consumer_secret'] = 'TWITTER_CONSUMER_SECRET' # # #Facebook Login # # get your own consumer key and consumer secret by registering at https://developers.facebook.com/apps # #Very Important: set the site_url= your domain in the application settings in the facebook app settings page # # callback url must be: http://[YOUR DOMAIN]/login/facebook/complete # settings['fb_api_key'] = 'FACEBOOK_API_KEY' # settings['fb_secret'] = 'FACEBOOK_SECRET' # # #Linkedin Login # #Get you own api key and secret from https://www.linkedin.com/secure/developer # settings['linkedin_api'] = 'LINKEDIN_API' # settings['linkedin_secret'] = 'LINKEDIN_SECRET' # # # Github login # # Register apps here: https://github.com/settings/applications/new # settings['github_server'] = 'github.com' # settings['github_redirect_uri'] = 'http://www.example.com/social_login/github/complete', # settings['github_client_id'] = 'GITHUB_CLIENT_ID' # settings['github_client_secret'] = 'GITHUB_CLIENT_SECRET' # # # Enable Federated login (OpenID and OAuth) # # Google App Engine Settings must be set to Authentication Options: Federated Login # settings['enable_federated_login'] = True # # # List of social login providers # # uri is for OpenID only (not OAuth) # settings['social_providers'] = { # 'google': {'name': 'google', 'label': 'Google', 'uri': 'gmail.com'}, # 'github': {'name': 'github', 'label': 'Github', 'uri': ''}, # 'facebook': {'name': 'facebook', 'label': 'Facebook', 'uri': ''}, # 'linkedin': {'name': 'linkedin', 'label': 'LinkedIn', 'uri': ''}, # #'myopenid': {'name': 'myopenid', 'label': 'MyOpenid', 'uri': 'myopenid.com'}, # 'twitter': {'name': 'twitter', 'label': 'Twitter', 'uri': ''}, # 'yahoo': {'name': 'yahoo', 'label': 'Yahoo!', 'uri': 'yahoo.com'}, # } # # # If true, it will write in datastore a log of every email sent # settings['log_email'] = False # # # If true, it will write in datastore a log of every visit # settings['log_visit'] = False
class Land(Property): # RESIDENTIAL ,COMMERCIAL, AGRICULTURE land_type = ndb.StringProperty(required=False) land_area = ndb.FloatProperty(required=False)
class AuditLog(BasicModel): action = ndb.StringProperty() how_the_action_invoked = ndb.StringProperty() app_user_invoked_action = ndb.StringProperty() target_resource = ndb.StringProperty() target_event_altered = ndb.StringProperty() comment = ndb.StringProperty() @classmethod def list_all(cls): return cls.query() @classmethod def fetch_date_range(cls, fromdate, todate): return cls.query().filter( ndb.AND(cls.created >= fromdate, cls.created < todate)) @classmethod def create(cls, params): item = cls() item.populate(**params) item.put() return item @classmethod def remove(cls): ndb.delete_multi(AuditLog.query().fetch(keys_only=True)) @staticmethod def email_fluff(email): subject = "Arista Inc. - Test Notification" body = """ Dear app user, Email Test only """ mail.send_mail(oauth_config['default_user'], email, subject, body) @staticmethod def daily_notification_on_major_actions(filename, out): mailingList = MailingList.list_all() emails = [mailing.email for mailing in mailingList] subject = "Arista Inc. - Daily Notification" body = """ Dear app user, This is to notify you on major actions performed today. """ mail.send_mail(sender=oauth_config['default_user'], to=emails, subject=subject, body=body, attachments=[(filename, out)]) @staticmethod def weekly_notification_on_major_actions(filename, out): mailingList = MailingList.list_all() emails = [mailing.email for mailing in mailingList] subject = "Arista Inc. - Weekly Notification" body = """ Dear app user, This is to notify you on major actions performed this week. """ mail.send_mail(sender=oauth_config['default_user'], to=emails, subject=subject, body=body, attachments=[(filename, out)]) # @staticmethod # def attendees_update_notification(email, selectedEmail, event_summary): # subject = "Arista Inc. - Calendar event update on %s." % event_summary # body = """ # Hello, # # "%s" has been removed in "%s" event. # # Thank You. # """ % (selectedEmail, event_summary) # # mail.send_mail(oauth_config['default_user'], email, subject, body) # @staticmethod # def new_resource_notification(email, name, resource): # # subject = "Arista Inc. - New Calendar Resource has been created." # body = """ # Hello %s, # # A New Calendar Resource has been created. # # Resource Id: %s # Resource Name: %s # Resource Type: %s # Resource Description: %s # # Thank You. # """ % (name, resource['resourceId'], resource['resourceCommonName'], resource['resourceType'], resource['resourceDescription']) # # mail.send_mail(oauth_config['default_user'], email, subject, body) @staticmethod def update_resource_notification(email, event_name, event_link, resource, datetime, attendees_list_display_names): # Example of datetime: 2015-05-01T19:30:00Z # take the date time, remove 6 hours hour = datetime[11:-7] hour = int(hour) hour -= 7 if hour < 0: hour += 24 hour = str(hour) if len(hour) < 2: hour = '0' + hour date = datetime[5:-13] + "-" + datetime[8:-10] + "-" + datetime[:-16] time = str(hour) + datetime[13:-1] datetime_f = date + " " + time + " PST" logging.debug(datetime_f) # attendees_list_display_names = ["Ender Wiggin", "Mazer Rackham", "Bean", "Valentine Wiggin", "Petra Arkanian", # "Peter Wiggin", "Hive Queen", "Jane", "Theresa Wiggin"] attendee_list = ', '.join(map(str, attendees_list_display_names)) logging.debug(attendee_list) subject = "Arista Inc. - A Resource has been updated on one of your Events. " body = """ Hello, The resource "%s" has been changed on the following event: Date/Time: %s Event Name: %s Participants: %s Link: %s - Arista IT """ % (resource['resourceCommonName'], datetime_f, event_name, attendee_list, event_link) logging.debug('test01') mail.send_mail(oauth_config['default_user'], email, subject, body)
class CommunityEvent(GeneralEvent): hola = ndb.StringProperty()
class ExternalEvent(GeneralEvent): is_all_day_event = ndb.BooleanProperty(default=False) subtitles = ndb.StringProperty( choices=('Spanish','English','Portuguese') )
class Widget(Model): title = ndb.StringProperty(required=True) content = ndb.TextProperty()
class VideoCastEvent(GeneralEvent): live_event_type = ndb.StringProperty( choices=('Speciality','Mega', 'Regional') ) is_on_testing_mode = ndb.BooleanProperty(default=False) has_all_confirmed_speakers = ndb.BooleanProperty(default=False) agenda_url = ndb.StringProperty() subtitles = ndb.StringProperty( choices=('Spanish','English','Portuguese') )