Пример #1
0
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
Пример #2
0
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)
Пример #3
0
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' ) )
Пример #4
0
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)
Пример #5
0
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 )
Пример #6
0
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")
Пример #7
0
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 )
Пример #9
0
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
        )
Пример #10
0
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))
Пример #11
0
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',  
		}
	})
Пример #12
0
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))
Пример #13
0
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)
Пример #14
0
class MailingList(Model):
    email = ndb.StringProperty()

    @classmethod
    def list_all(cls):
        return cls.query()
Пример #15
0
class University(BasicModel):
    acronym = ndb.StringProperty(required=True)
    name = ndb.StringProperty()
    description = ndb.TextProperty()
Пример #16
0
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
        )
Пример #17
0
class Anchor(EventPerson):
	facebook_account = ndb.StringProperty()
	twitter_account =  ndb.StringProperty()
	biography = ndb.TextProperty()
	career =  ndb.StringProperty()
Пример #18
0
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
Пример #19
0
class Land(Property):
    # RESIDENTIAL ,COMMERCIAL, AGRICULTURE
    land_type = ndb.StringProperty(required=False)
    land_area = ndb.FloatProperty(required=False)
Пример #20
0
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)
Пример #21
0
class CommunityEvent(GeneralEvent):
	hola = ndb.StringProperty()
Пример #22
0
class ExternalEvent(GeneralEvent):
	is_all_day_event = ndb.BooleanProperty(default=False)
	subtitles = ndb.StringProperty( choices=('Spanish','English','Portuguese') )
Пример #23
0
class Widget(Model):
    title = ndb.StringProperty(required=True)
    content = ndb.TextProperty()
Пример #24
0
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') )