python类delete_multi()的实例源码

models.py 文件源码 项目:tichu-tournament 作者: aragos 项目源码 文件源码 阅读 15 收藏 0 点赞 0 评论 0
def PutPlayers(self, player_list, no_pairs):
    ''' Create a new PlayerPair Entity corresponding to each player pair for 
        pair numbers 1 ... no_pairs saving any useful information from 
        player_list and put it into Datastore as a child of this Tournament.
        Also, the no_players has changed, generates a unique 
        (for this tournament) id associated with each pair.

    Args:
      player_list: list of dicts with keys pair_no (req), name (opt), 
        and email (opt)
      no_pairs: the total number of pairs in this tournament. Exactly this many
        PlayerPairs are created.
    '''
    pair_dict = {}
    if player_list:
      for player in player_list : 
        pair_no = player['pair_no']
        del player['pair_no']
        if pair_dict.get(pair_no):
          pair_dict[pair_no].append(player)
        else:
          pair_dict[pair_no]= [player]

    player_list = PlayerPair.query(ancestor=self.key).fetch()

    # If the number of players doesn't change, we just override some fields
    # in existing pairs. Otherwise, we delete existing pairs and create new 
    # ones.
    override_existing = len(player_list) == no_pairs
    if not override_existing:
      random_ids = self._RandomId(no_pairs)
      ndb.delete_multi([p.key for p in player_list])
    else:
      player_list.sort(key = lambda pp : pp.pair_no)

    # The create a PlayerPair and put it into Datastore for each possible
    # number.
    for i in range(1, no_pairs + 1):
      pair_members = pair_dict.get(i) 
      str_pair_members = json.dumps(pair_members) if pair_members else ''
      if override_existing:
          player_pair = player_list[i-1]
          player_pair.players = str_pair_members
      else:
        player_pair = PlayerPair(players=str_pair_members,
                                 pair_no=i, id=random_ids[i-1],
                                 parent=self.key)
      player_pair.key = PlayerPair.CreateKey(self, i)
      player_pair.put()
handlerbase.py 文件源码 项目:enkiWS 作者: juliettef 项目源码 文件源码 阅读 13 收藏 0 点赞 0 评论 0
def delete_account( self, delete_posts = False, token = '' ):
        token_to_save = 'accountdelete'
        if not token:
            # there is no token if the user has no email address: they are deleted immediately. They must be logged in.
            user_to_delete = self.enki_user
        else:
            # a user has followed a accountdelete token link. The user account associated with the token will be deleted
            tokenEntity = EnkiModelTokenVerify.get_by_token( token )
            user_to_delete = EnkiModelUser.get_by_id( tokenEntity.user_id )
            # delete all user related tokens except any verify token related to account deletion that's not yet been used
            if tokenEntity.type == token_to_save:
                token_to_save = 'accountandpostsdelete'
        verify_tokens_to_delete = EnkiModelTokenVerify.fetch_keys_by_user_id_except_type( user_to_delete.key.id(), token_to_save )
        if verify_tokens_to_delete:
            ndb.delete_multi( verify_tokens_to_delete )
        email_rollback_tokens_to_delete = EnkiModelTokenEmailRollback.fetch_keys_by_user_id( user_to_delete.key.id())
        if email_rollback_tokens_to_delete:
            ndb.delete_multi( email_rollback_tokens_to_delete )
        # Delete the user account and log them out.
        if not HandlerBase.account_is_active( user_to_delete.key.id()):
            # delete user if the account is inactive
            display_names = EnkiModelDisplayName.fetch_keys_by_user_id(user_to_delete.key.id())
            if display_names:
                ndb.delete_multi( display_names )
            user_to_delete.key.delete()
        else:
            # anonymise the user
            if user_to_delete.email:
                user_to_delete.email = None
            if user_to_delete.password:
                user_to_delete.password = None
            if user_to_delete.auth_ids_provider:
                user_to_delete.auth_ids_provider = []
            user_to_delete.put()
            # keep all historical display_names. Add a new current display_name '[deleted]' (unless it's already been deleted)
            display_name = EnkiModelDisplayName.get_by_user_id_current( user_to_delete.key.id())
            if display_name:
                if display_name.prefix != EnkiModelDisplayName.DELETED_PREFIX or display_name.suffix != EnkiModelDisplayName.DELETED_SUFFIX:
                    EnkiModelDisplayName.set_display_name( user_to_delete.key.id(), EnkiModelDisplayName.DELETED_PREFIX, EnkiModelDisplayName.DELETED_SUFFIX )
            # delete user's sent and received messages
            EnkiModelMessage.delete_user_messages( user_to_delete.key.id())
            # delete user's posts if required
            if delete_posts:
                EnkiModelPost.delete_user_posts( user_to_delete.key.id())
        # log the deleted user out
        if self.enki_user == user_to_delete.key.id():
            self.log_out()
        EnkiModelTokenAuth.revoke_user_authentications( user_to_delete.key.id())
handlers.py 文件源码 项目:api-oreilly-free-books 作者: erikcaffrey 项目源码 文件源码 阅读 21 收藏 0 点赞 0 评论 0
def get(self):
        """Return API available methods."""
        # Remove old data
        cs = Category.query()
        ndb.delete_multi([x.key for x in cs])
        bs = Book.query()
        ndb.delete_multi([x.key for x in bs])

        # Count variables
        categories_count = 0
        subcategories_count = 0
        books_count = 0

        # NOQA: lxml tree from web page response and search for category boxes.
        tree = html.fromstring(urllib2.urlopen(self.source_url).read())
        category_boxes = tree.xpath('//div[@class="callout-row"]')

        for category_box in category_boxes:

            # Get box title by filtering all H3 tags without attributes.
            category_name = category_box.xpath('.//h3[not(@*)]/text()')[0]

            # Create category entity and update counters.
            category = Category(name=category_name, category=True, subcategory=False)  # NOQA
            category.put()
            categories_count += 1

            # Get subcategories by looking for all divs with the right class.
            subcategories = category_box.xpath('.//div[not(@class="product-row cover-showcase")]')  # NOQA
            book_expression = './/a'

            # If categories, iterate each and append book with subcategory
            for subcategory_box in subcategories:
                # Ger subcategory title by filtering the first H3 tag.
                subcategory_name = subcategory_box.xpath('.//h3/text()')[0]

                # Create category entity and update counters.
                subcategory = Category(name=subcategory_name, category=False, subcategory=True)  # NOQA
                subcategory.put()
                subcategories_count += 1

                books = subcategory_box.xpath(book_expression)
                for book in books:
                    self.append_book(book, category, subcategory)
                    books_count += 1

            # Else, get books and append each with category only
            if not subcategories:
                books = category_box.xpath(book_expression)
                for book in books:
                    self.append_book(book, category)
                    books_count += 1

        return self.reponse({
            'status': 'ok',
            'books_added': books_count,
            'categories_added': categories_count,
            'subcategories_added': subcategories_count,
        })


问题


面经


文章

微信
公众号

扫码关注公众号