~fabricematrat/charmworld/redirect-charm

« back to all changes in this revision

Viewing changes to charmworld/scripts/remove_charm.py

  • Committer: Benji York
  • Date: 2013-11-18 20:38:47 UTC
  • mto: This revision was merged to the branch mainline in revision 465.
  • Revision ID: benji@benjiyork.com-20131118203847-2mfs1w7b8aqy64mr
checkpoint

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright 2012, 2013 Canonical Ltd.  This software is licensed under the
 
2
# GNU Affero General Public License version 3 (see the file LICENSE).
 
3
 
 
4
from __future__ import print_function
 
5
 
 
6
__metaclass__ = type
 
7
 
 
8
import sys
 
9
from pyelasticsearch.exceptions import ElasticHttpNotFoundError
 
10
from charmworld.utils import get_ini
 
11
from charmworld.models import (
 
12
    CharmSource,
 
13
    FeaturedSource,
 
14
    getconnection,
 
15
    getdb,
 
16
)
 
17
from charmworld.search import ElasticSearchClient
 
18
 
 
19
 
 
20
def main(argv, stderr=sys.stderr, db=None, index_client=None):
 
21
    """The main function for the server start timestamp removal script."""
 
22
    if len(argv) != 2:
 
23
        print(
 
24
            'Please provide the ID of the charm you wish to remove.',
 
25
            file=stderr)
 
26
        return 1
 
27
 
 
28
    charm_id = argv[1]
 
29
 
 
30
    if db is None:
 
31
        settings = get_ini()
 
32
        connection = getconnection(settings)
 
33
        db = getdb(connection, settings.get('mongo.database'))
 
34
 
 
35
    # If the specified charm does not exist, tell the user.
 
36
    charm_query = {'_id': charm_id}
 
37
    charm_data = db.charms.find_one(charm_query)
 
38
    if charm_data is None:
 
39
        print('Unknown charm ID: %r' % charm_id, file=stderr)
 
40
        return 1
 
41
 
 
42
    if index_client is None:
 
43
        index_client = ElasticSearchClient.from_settings(settings)
 
44
 
 
45
    # The charm needs to be removed from the search engine.
 
46
    try:
 
47
        index_client.delete_charm(charm_data)
 
48
    except ElasticHttpNotFoundError:
 
49
        # It is fine if the charm was not indexed.
 
50
        pass
 
51
 
 
52
    # If the charm is featured, we want to unfeature it.
 
53
    source = FeaturedSource.from_db(db)
 
54
    source.clear_featured(charm_data, 'charm')
 
55
 
 
56
    # Finally, remove all the revisions of the charm document from the
 
57
    # database.
 
58
    charm_query = CharmSource.make_all_revisions_query(charm_data)
 
59
    db.charms.remove(charm_query, justOne=True)
 
60
    return 0
 
61
 
 
62
 
 
63
def entry_point():
 
64
    """Script entry point for removing a server's start up timestamp."""
 
65
    sys.exit(main(sys.argv))