Example #1
0
    def insert(cls, user_from_email, request):
        parent_key = ndb.Key(urlsafe=request.about)
        note_author = Userinfo()

        note_author.display_name = user_from_email.google_display_name
        note_author.photo = user_from_email.google_public_profile_photo_url
        note = Note(owner=user_from_email.google_user_id,
                    organization=user_from_email.organization,
                    author=note_author,
                    title=request.title,
                    content=request.content)
        entityKey_async = note.put_async()
        entityKey = entityKey_async.get_result()

        note.put_index()

        Edge.insert(start_node=parent_key,
                    end_node=entityKey,
                    kind='topics',
                    inverse_edge='parents')

        author_shema = AuthorSchema(
            google_user_id=note.owner,
            display_name=note_author.display_name,
            google_public_profile_url=note_author.google_public_profile_url,
            photo=note_author.display_name,
            edgeKey="",
            email=note_author.email)

        note_schema = NoteSchema(id=str(note.key.id()),
                                 entityKey=note.key.urlsafe(),
                                 title=note.title,
                                 content=note.content,
                                 created_by=author_shema)
        return note_schema
Example #2
0
 def update_status(cls, user_from_email, request):
     case_key = ndb.Key(urlsafe=request.entityKey)
     status_key = ndb.Key(urlsafe=request.status)
     # insert edges
     Edge.insert(start_node=case_key,
                 end_node=status_key,
                 kind='status',
                 inverse_edge='related_cases')
Example #3
0
 def update_status(cls, user_from_email, request):
     case_key = ndb.Key(urlsafe=request.entityKey)
     status_key = ndb.Key(urlsafe=request.status)
     # insert edges
     Edge.insert(start_node=case_key,
                 end_node=status_key,
                 kind='status',
                 inverse_edge='related_cases')
Example #4
0
    def attach_files(cls, user_from_email, request):
        items = request.items
        author = Userinfo()
        author.google_user_id = user_from_email.google_user_id
        author.display_name = user_from_email.google_display_name
        author.photo = user_from_email.google_public_profile_photo_url
        if request.access:
            access = request.access
        else:
            access = 'public'
        items_attached = []
        for item in items:
            document = cls(
                title=item.title,
                resource_id=item.id,
                mimeType=item.mimeType,
                embedLink=item.embedLink,
                owner=user_from_email.google_user_id,
                organization=user_from_email.organization,
                author=author,
                access=access,
                comments=0
            )
            document_key = document.put_async()
            document_key_async = document_key.get_result()
            if request.parent:

                parent_key = ndb.Key(urlsafe=request.parent)
                taskqueue.add(
                    url='/workers/syncdocumentwithteam',
                    queue_name='iogrow-low',
                    params={
                        'user_email': user_from_email.email,
                        'doc_id': str(document_key_async.id()),
                        'parent_key_str': request.parent
                    }
                )
                # insert edges
                Edge.insert(start_node=parent_key,
                            end_node=document_key_async,
                            kind='documents',
                            inverse_edge='parents')
                EndpointsHelper.update_edge_indexes(
                    parent_key=document_key_async,
                    kind='documents',
                    indexed_edge=str(parent_key.id())
                )
            else:
                data = {'id': document_key_async.id()}
                document.put_index(data)
            file_attached = iomessages.FileAttachedSchema(
                id=str(document_key_async.id()),
                name=item.title,
                embedLink=document.embedLink,
            )
            items_attached.append(file_attached)
        return iomessages.FilesAttachedResponse(items=items_attached)
Example #5
0
 def insert(cls, user_from_email, request):
     # prepare google drive service
     credentials = user_from_email.google_credentials
     http = httplib2.Http()
     service = build('drive', 'v2', http=http)
     credentials.authorize(http)
     # prepare params to insert
     params = {
         'title': request.title,
         'mimeType': request.mimeType
     }
     # execute files.insert and get resource_id
     created_document = service.files().insert(body=params).execute()
     author = Userinfo()
     author.google_user_id = user_from_email.google_user_id
     author.display_name = user_from_email.google_display_name
     author.photo = user_from_email.google_public_profile_photo_url
     document = cls(
         owner=user_from_email.google_user_id,
         organization=user_from_email.organization,
         access=request.access,
         title=request.title,
         mimeType=request.mimeType,
         resource_id=created_document['id'],
         embedLink=created_document['embedLink'],
         author=author
     )
     document_key = document.put_async()
     document_key_async = document_key.get_result()
     if request.parent:
         parent_key = ndb.Key(urlsafe=request.parent)
         taskqueue.add(
             url='/workers/syncdocumentwithteam',
             queue_name='iogrow-low',
             params={
                 'user_email': user_from_email.email,
                 'doc_id': str(document_key_async.id()),
                 'parent_key_str': request.parent
             }
         )
         # insert edges
         Edge.insert(start_node=parent_key,
                     end_node=document_key_async,
                     kind='documents',
                     inverse_edge='parents')
         EndpointsHelper.update_edge_indexes(
             parent_key=document_key_async,
             kind='documents',
             indexed_edge=str(parent_key.id())
         )
     else:
         data = {'id': document_key_async.id()}
         document.put_index(data)
     return DocumentSchema(id=str(document_key_async.id()), embedLink=document.embedLink)
Example #6
0
    def attach_keyword(cls, user_from_email, request):
        start_node = ndb.Key(urlsafe=request.parent)
        end_node = ndb.Key(urlsafe=request.keyword_key)
        edge_key = Edge.insert(start_node=start_node,
                               end_node=end_node,
                               kind='keywords',
                               inverse_edge='keywordged_on')
        edge = edge_key.get()
        if end_node.get().locality != 'Blog':
            EndpointsHelper.update_edge_indexes(parent_key=start_node,
                                                kind='keywords',
                                                indexed_edge=str(
                                                    end_node.id()))

        return KeywordSchema(edgeKey=edge.key.urlsafe(),
                             id=str(edge.end_node.id()),
                             entityKey=edge.end_node.urlsafe(),
                             word=edge.end_node.get().word,
                             color=edge.end_node.get().color)
Example #7
0
    def attach_tag(cls, user_from_email, request):
        start_node = ndb.Key(urlsafe=request.parent)
        end_node = ndb.Key(urlsafe=request.tag_key)
        edge_key = Edge.insert(start_node=start_node,
                               end_node=end_node,
                               kind='tags',
                               inverse_edge='tagged_on')
        edge = edge_key.get()
        if end_node.get().about_kind != 'Blog':
            EndpointsHelper.update_edge_indexes(parent_key=start_node,
                                                kind='tags',
                                                indexed_edge=str(
                                                    end_node.id()))

        return TagSchema(edgeKey=edge.key.urlsafe(),
                         id=str(edge.end_node.id()),
                         entityKey=edge.end_node.urlsafe(),
                         name=edge.end_node.get().name,
                         color=edge.end_node.get().color)
Example #8
0
    def attach_keyword(cls, user_from_email, request):
        start_node = ndb.Key(urlsafe=request.parent)
        end_node = ndb.Key(urlsafe=request.keyword_key)
        edge_key = Edge.insert(
            start_node=start_node,
            end_node=end_node,
            kind='keywords',
            inverse_edge='keywordged_on'
        )
        edge = edge_key.get()
        if end_node.get().locality != 'Blog':
            EndpointsHelper.update_edge_indexes(
                parent_key=start_node,
                kind='keywords',
                indexed_edge=str(end_node.id())
            )

        return KeywordSchema(
            edgeKey=edge.key.urlsafe(),
            id=str(edge.end_node.id()),
            entityKey=edge.end_node.urlsafe(),
            word=edge.end_node.get().word,
            color=edge.end_node.get().color
        )
Example #9
0
    def attach_tag(cls, user_from_email, request):
        start_node = ndb.Key(urlsafe=request.parent)
        end_node = ndb.Key(urlsafe=request.tag_key)
        edge_key = Edge.insert(
            start_node=start_node,
            end_node=end_node,
            kind='tags',
            inverse_edge='tagged_on'
        )
        edge = edge_key.get()
        if end_node.get().about_kind != 'Blog':
            EndpointsHelper.update_edge_indexes(
                parent_key=start_node,
                kind='tags',
                indexed_edge=str(end_node.id())
            )

        return TagSchema(
            edgeKey=edge.key.urlsafe(),
            id=str(edge.end_node.id()),
            entityKey=edge.end_node.urlsafe(),
            name=edge.end_node.get().name,
            color=edge.end_node.get().color
        )
Example #10
0
    def insert(cls, user_from_email, request):
        if request.status:
            status = request.status
        else:
            status = 'open'
        if request.access:
            access = request.access
        else:
            access = 'public'
        author = Userinfo()
        author.google_user_id = user_from_email.google_user_id
        author.display_name = user_from_email.google_display_name
        author.photo = user_from_email.google_public_profile_photo_url
        task = Task(title=request.title,
                    status=status,
                    owner=user_from_email.google_user_id,
                    organization=user_from_email.organization,
                    access=access,
                    author=author)
        if request.due:
            task.due = datetime.datetime.strptime(
                request.due,
                "%Y-%m-%dT%H:%M:00.000000"
            )
        task_key = task.put_async()
        if request.due:
            taskqueue.add(
                url='/workers/synctask',
                queue_name='iogrow-low-task',
                params={
                    'email': user_from_email.email,
                    'starts_at': request.due,
                    'ends_at': request.due,
                    'summary': request.title,
                    'task_id': task_key.get_result().id()
                }
            )

        if request.reminder:
            pass
        task_key_async = task_key.get_result()
        if request.parent:
            # insert edges
            parent_key = ndb.Key(urlsafe=request.parent)
            Edge.insert(start_node=parent_key,
                        end_node=task_key_async,
                        kind='tasks',
                        inverse_edge='related_to')
            EndpointsHelper.update_edge_indexes(
                parent_key=task_key_async,
                kind='tasks',
                indexed_edge=str(parent_key.id())
            )
        else:
            data = {'id': task_key_async.id()}
            task.put_index(data)
        if request.assignees:
            # insert edges
            for assignee in request.assignees:
                assignee_key = ndb.Key(urlsafe=assignee.entityKey)
                assignee_user = assignee_key.get()
                assignee_email = assignee_user.email
                # add a task queue to send notification email to assignee
                body = '<p>view details on ioGrow: <a href="http://app.iogrow.com/#/tasks/show/' + str(
                    task_key_async.id()) + '">'
                body += request.title
                body += '</a></p>'
                taskqueue.add(
                    url='/workers/send_email_notification',
                    queue_name='iogrow-low',
                    params={
                        'user_email': user_from_email.email,
                        'to': assignee_email,
                        'subject': '[task]: ' + request.title,
                        'body': body
                    }
                )
                Edge.insert(start_node=task_key_async,
                            end_node=assignee_key,
                            kind='assignees',
                            inverse_edge='assigned_to')
        if request.tags:
            # insert edges
            for tag in request.tags:
                Edge.insert(start_node=task_key_async,
                            end_node=ndb.Key(urlsafe=tag.entityKey),
                            kind='tags',
                            inverse_edge='tagged_on')
        task_schema = TaskSchema(
            id=str(task_key_async.id()),
            entityKey=task_key_async.urlsafe(),
            title=task.title,
            status=task.status,
            access=task.access
        )
        if task.due:
            task_schema.due = task.due.isoformat()
        return task_schema
Example #11
0
    def insert(cls, user_from_email, request):
        if request.status:
            status = request.status
        else:
            status = 'open'
        if request.access:
            access = request.access
        else:
            access = 'public'
        author = Userinfo()
        author.google_user_id = user_from_email.google_user_id
        author.display_name = user_from_email.google_display_name
        author.photo = user_from_email.google_public_profile_photo_url
        task = Task(title=request.title,
                    status=status,
                    owner=user_from_email.google_user_id,
                    organization=user_from_email.organization,
                    access=access,
                    author=author)
        if request.due:
            task.due = datetime.datetime.strptime(request.due,
                                                  "%Y-%m-%dT%H:%M:00.000000")
        task_key = task.put_async()
        if request.due:
            taskqueue.add(url='/workers/synctask',
                          queue_name='iogrow-low-task',
                          params={
                              'email': user_from_email.email,
                              'starts_at': request.due,
                              'ends_at': request.due,
                              'summary': request.title,
                              'task_id': task_key.get_result().id()
                          })

        if request.reminder:
            pass
        task_key_async = task_key.get_result()
        if request.parent:
            # insert edges
            parent_key = ndb.Key(urlsafe=request.parent)
            Edge.insert(start_node=parent_key,
                        end_node=task_key_async,
                        kind='tasks',
                        inverse_edge='related_to')
            EndpointsHelper.update_edge_indexes(parent_key=task_key_async,
                                                kind='tasks',
                                                indexed_edge=str(
                                                    parent_key.id()))
        else:
            data = {'id': task_key_async.id()}
            task.put_index(data)
        if request.assignees:
            # insert edges
            for assignee in request.assignees:
                assignee_key = ndb.Key(urlsafe=assignee.entityKey)
                assignee_user = assignee_key.get()
                assignee_email = assignee_user.email
                # add a task queue to send notification email to assignee
                body = '<p>view details on ioGrow: <a href="http://app.iogrow.com/#/tasks/show/' + str(
                    task_key_async.id()) + '">'
                body += request.title
                body += '</a></p>'
                taskqueue.add(url='/workers/send_email_notification',
                              queue_name='iogrow-low',
                              params={
                                  'user_email': user_from_email.email,
                                  'to': assignee_email,
                                  'subject': '[task]: ' + request.title,
                                  'body': body
                              })
                Edge.insert(start_node=task_key_async,
                            end_node=assignee_key,
                            kind='assignees',
                            inverse_edge='assigned_to')
        if request.tags:
            # insert edges
            for tag in request.tags:
                Edge.insert(start_node=task_key_async,
                            end_node=ndb.Key(urlsafe=tag.entityKey),
                            kind='tags',
                            inverse_edge='tagged_on')
        task_schema = TaskSchema(id=str(task_key_async.id()),
                                 entityKey=task_key_async.urlsafe(),
                                 title=task.title,
                                 status=task.status,
                                 access=task.access)
        if task.due:
            task_schema.due = task.due.isoformat()
        return task_schema
Example #12
0
 def insert(cls, user_from_email, request):
     case = cls(owner=user_from_email.google_user_id,
                organization=user_from_email.organization,
                access=request.access,
                name=request.name,
                priority=request.priority,
                description=request.description)
     case_key = case.put_async()
     case_key_async = case_key.get_result()
     indexed = False
     status_key = None
     if request.status:
         status_key = ndb.Key(urlsafe=request.status)
         # insert edges
         Edge.insert(start_node=case_key_async,
                     end_node=status_key,
                     kind='status',
                     inverse_edge='related_cases')
     account = None
     if request.account:
         try:
             account_key = ndb.Key(urlsafe=request.account)
             account = account_key.get()
         except:
             from crm.iomodels.accounts import Account
             account_key = Account.get_key_by_name(
                 user_from_email=user_from_email, name=request.account)
             if account_key:
                 account = account_key.get()
             else:
                 is_new_account = True
                 account = Account(
Example #13
0
    def receive(self, mail_message):
        sender_id = mail_message.to.split("@")[0]
        try:
            bcc = mail_message.bcc.split("@")[0]
        except:
            bcc = 'undefined'
        user_id = 'undefined'
        if sender_id.isdigit():
            user_id = sender_id
        if bcc.isdigit():
            user_id = bcc
        user = User.get_by_gid(user_id)
        if user:
            sender_email = re.findall(r'[\w\.-]+@[\w\.-]+',
                                      mail_message.sender)
            if user.email == sender_email[0]:
                print 'authorized'
                html_bodies = mail_message.bodies('text/html')
                email_body = ''
                additional_emails = ' '
                for content_type, body in html_bodies:
                    decoded_html = smart_str(body.decode())
                    email_body += decoded_html
                    additional_emails += ' ' + smart_str(mail_message.to)
                    try:
                        additional_emails += ' ' + smart_str(mail_message.bcc)
                    except:
                        pass
                    try:
                        additional_emails += ' ' + smart_str(mail_message.cc)
                    except:
                        pass
                re_emails = re.findall(r'[\w\.-]+@[\w\.-]+',
                                       email_body + additional_emails)
                emails = list(set(re_emails))
                print 'emails'
                print emails
                for email in emails:
                    generic_prop = ndb.GenericProperty()
                    generic_prop._name = 'email'
                    nodes = Node.query(generic_prop == email).fetch()
                    if len(nodes) > 0:
                        for node in nodes:
                            parents_edge_list = Edge.list(start_node=node.key,
                                                          kind='parents')
                            for edge in parents_edge_list['items']:
                                parent_key = edge.end_node
                                # insert a note related to the parent node
                                note_author = Userinfo()
                                note_author.display_name = user.google_display_name
                                note_author.photo = user.google_public_profile_photo_url
                                note = Note(owner=user.google_user_id,
                                            organization=user.organization,
                                            author=note_author,
                                            title=mail_message.subject,
                                            content=email_body)
                                entityKey_async = note.put_async()
                                entityKey = entityKey_async.get_result()
                                Edge.insert(start_node=parent_key,
                                            end_node=entityKey,
                                            kind='topics',
                                            inverse_edge='parents')
                                EndpointsHelper.update_edge_indexes(
                                    parent_key=entityKey,
                                    kind='topics',
                                    indexed_edge=str(parent_key.id()))
                    else:
                        pass
                        # We should create a lead related to this email
                        # and attach this email with this lead
            else:
                print 'not authorized'

        else:
            print 'user doesnt exist'
Example #14
0
    def insert(cls, user_from_email, request):
        author = Userinfo()
        author.google_user_id = user_from_email.google_user_id
        author.display_name = user_from_email.google_display_name
        author.photo = user_from_email.google_public_profile_photo_url
        event = cls(
            owner=user_from_email.google_user_id,
            organization=user_from_email.organization,
            access=request.access,
            title=request.title,
            starts_at=datetime.datetime.strptime(request.starts_at, "%Y-%m-%dT%H:%M:00.000000"),
            ends_at=datetime.datetime.strptime(request.ends_at, "%Y-%m-%dT%H:%M:00.000000"),
            where=request.where,
            description=request.description,
            author=author,
            allday=request.allday,
            timezone=request.timezone
        )
        event_key = event.put_async()
        attendees = []
        if request.invites:
            attendees = request.invites

        taskqueue.add(
            url='/workers/syncevent',
            queue_name='iogrow-low-event',
            params={
                'email': user_from_email.email,
                'starts_at': request.starts_at,
                'ends_at': request.ends_at,
                'summary': request.title,
                'event_id': event_key.get_result().id(),
                'attendees': attendees,
                'guest_modify': request.guest_modify,
                'guest_invite': request.guest_invite,
                'guest_list': request.guest_list,
                'description': request.description,
                'reminder': request.reminder,
                'method': request.method,
                'timezone': request.timezone,
                'where': request.where
            }
        )

        event_key_async = event_key.get_result()
        if request.parent:

            parent_key = ndb.Key(urlsafe=request.parent)
            # insert edges
            Edge.insert(start_node=parent_key,
                        end_node=event_key_async,
                        kind='events',
                        inverse_edge='parents')
            EndpointsHelper.update_edge_indexes(
                parent_key=event_key_async,
                kind='events',
                indexed_edge=str(parent_key.id())
            )
        else:
            data = {'id': event_key_async.id()}
            event.put_index(data)
        event_schema = EventSchema(
            id=str(event_key_async.id()),
            entityKey=event_key_async.urlsafe(),
            title=event.title,
            starts_at=event.starts_at.isoformat(),
            ends_at=event.ends_at.isoformat(),
            where=event.where,
            created_at=event.created_at.isoformat(),
            updated_at=event.updated_at.isoformat(),
            access=event.access,
            timezone=event.timezone,
            allday=event.allday
        )
        return event_schema
Example #15
0
    def insert(cls, user_from_email, request):
        case = cls(
            owner=user_from_email.google_user_id,
            organization=user_from_email.organization,
            access=request.access,
            name=request.name,
            priority=request.priority,
            description=request.description
        )
        case_key = case.put_async()
        case_key_async = case_key.get_result()
        indexed = False
        status_key = None
        if request.status:
            status_key = ndb.Key(urlsafe=request.status)
            # insert edges
            Edge.insert(start_node=case_key_async,
                        end_node=status_key,
                        kind='status',
                        inverse_edge='related_cases')
        account = None
        if request.account:
            try:
                account_key = ndb.Key(urlsafe=request.account)
                account = account_key.get()
            except:
                from crm.iomodels.accounts import Account
                account_key = Account.get_key_by_name(
                    user_from_email=user_from_email,
                    name=request.account
                )
                if account_key:
                    account = account_key.get()
                else:
                    is_new_account = True
                    account = Account(
                        name=request.account,
                        owner=user_from_email.google_user_id,
                        organization=user_from_email.organization,
                        access=request.access
                    )
                    account_key_async = account.put_async()
                    account_key = account_key_async.get_result()
                    data = EndpointsHelper.get_data_from_index(str(account.key.id()))
                    account.put_index(data)
        if account:
            # insert edges
            Edge.insert(start_node=account.key,
                        end_node=case_key_async,
                        kind='cases',
                        inverse_edge='parents'
                        )
            EndpointsHelper.update_edge_indexes(
                parent_key=case_key_async,
                kind='cases',
                indexed_edge=str(account.key.id())
            )
            indexed = True

        contact = None
        if request.contact:
            try:
                contact_key = ndb.Key(urlsafe=request.contact)
                contact = contact_key.get()
            except:
                from crm.iomodels.contacts import Contact
                contact_key = Contact.get_key_by_name(
                    user_from_email=user_from_email,
                    name=request.contact
                )
                if contact_key:
                    contact = contact_key.get()
                else:
                    firstname = request.contact.split()[0]
                    lastname = " ".join(request.contact.split()[1:])
                    contact = Contact(
                        firstname=firstname,
                        lastname=lastname,
                        owner=user_from_email.google_user_id,
                        organization=user_from_email.organization,
                        access=request.access
                    )
                    contact_key_async = contact.put_async()
                    contact_key = contact_key_async.get_result()
                    if account:
                        data = EndpointsHelper.get_data_from_index(str(contact.key.id()))
                        contact.put_index(data)
                        Edge.insert(start_node=account.key,
                                    end_node=contact.key,
                                    kind='contacts',
                                    inverse_edge='parents')
                        EndpointsHelper.update_edge_indexes(
                            parent_key=contact.key,
                            kind='contacts',
                            indexed_edge=str(account.key.id())
                        )
            if contact:
                # insert edges
                Edge.insert(start_node=contact.key,
                            end_node=case_key_async,
                            kind='cases',
                            inverse_edge='parents')
                EndpointsHelper.update_edge_indexes(
                    parent_key=case_key_async,
                    kind='cases',
                    indexed_edge=str(contact.key.id())
                )
        for infonode in request.infonodes:
            Node.insert_info_node(
                case_key_async,
                iomessages.InfoNodeRequestSchema(
                    kind=infonode.kind,
                    fields=infonode.fields
                )
            )
        if not indexed:
            data = {'id': case_key_async.id()}
            case.put_index(data)
        current_status_schema = None
        if status_key:
            if status_key.get():
                current_status_schema = CaseStatusSchema(
                    name=status_key.get().status
                )

        case_schema = CaseSchema(
            id=str(case_key_async.id()),
            entityKey=case_key_async.urlsafe(),
            name=case.name,
            current_status=current_status_schema,
            priority=case.priority,
            created_at=case.created_at.strftime("%Y-%m-%dT%H:%M:00.000"),
            updated_at=case.updated_at.strftime("%Y-%m-%dT%H:%M:00.000")
        )
        return case_schema
    def receive(self, mail_message):
        sender_id = mail_message.to.split("@")[0]
        try:
            bcc = mail_message.bcc.split("@")[0]
        except:
            bcc = 'undefined'
        user_id = 'undefined'
        if sender_id.isdigit():
            user_id=sender_id
        if bcc.isdigit():
            user_id=bcc
        user = User.get_by_gid(user_id)
        if user:
            sender_email=re.findall(r'[\w\.-]+@[\w\.-]+', mail_message.sender)
            if user.email==sender_email[0]:
                print 'authorized'
                html_bodies = mail_message.bodies('text/html')
                email_body = ''
                additional_emails = ' '
                for content_type, body in html_bodies:
                    decoded_html = smart_str(body.decode())
                    email_body+=decoded_html
                    additional_emails+=' ' + smart_str(mail_message.to)
                    try:
                        additional_emails+=' ' + smart_str(mail_message.bcc)
                    except:
                        pass
                    try:
                        additional_emails+=' ' + smart_str(mail_message.cc)
                    except:
                        pass
                re_emails = re.findall(r'[\w\.-]+@[\w\.-]+', email_body + additional_emails)
                emails = list(set(re_emails))
                print 'emails'
                print emails
                for email in emails:
                    generic_prop = ndb.GenericProperty()
                    generic_prop._name = 'email'
                    nodes = Node.query(generic_prop==email).fetch()
                    if len(nodes)>0:
                        for node in nodes:
                            parents_edge_list = Edge.list(
                                                      start_node = node.key,
                                                      kind = 'parents'
                                                      )
                            for edge in parents_edge_list['items']:
                                parent_key = edge.end_node
                                  # insert a note related to the parent node
                                note_author = Userinfo()
                                note_author.display_name = user.google_display_name
                                note_author.photo = user.google_public_profile_photo_url
                                note = Note(
                                            owner = user.google_user_id,
                                            organization = user.organization,
                                            author = note_author,
                                            title = mail_message.subject,
                                            content = email_body
                                        )
                                entityKey_async = note.put_async()
                                entityKey = entityKey_async.get_result()
                                Edge.insert(
                                            start_node = parent_key,
                                            end_node = entityKey,
                                            kind = 'topics',
                                            inverse_edge = 'parents'
                                        )
                                EndpointsHelper.update_edge_indexes(
                                                                parent_key=entityKey,
                                                                kind='topics',
                                                                indexed_edge=str(parent_key.id())
                                                                )
                    else:
                        pass
                          # We should create a lead related to this email
                          # and attach this email with this lead
            else:
                print 'not authorized'

        else:
            print 'user doesnt exist'