~fabricematrat/charmworld/redirect-charm

« back to all changes in this revision

Viewing changes to charmworld/models.py

  • Committer: Tarmac
  • Author(s): Brad Crittenden
  • Date: 2014-04-21 15:59:48 UTC
  • mfrom: (501.2.4 comma-migration-2)
  • Revision ID: tarmac-20140421155948-ot1x6l5gu321ul4v
Exodus to remove comma-sep constraints.

Comma-separated constraints in bundles are deprecated.  Currently newly
processed bundles are converted to space-separated on ingestion but there are
a number of old bundles in the db that need fixing.

As this is an exodus, and only one can be present at a time, the 025 exodus is
deleted.

https://codereview.appspot.com/89770044/

R=jcsackett.

Approved by Juju Gui Bot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1884
1884
    index_client.index_bundles(index_data.values())
1885
1885
 
1886
1886
 
 
1887
def convert_bundle_constraints(bundle_data):
 
1888
    """Given a bundle data dictionary, convert the constraints.
 
1889
 
 
1890
    Constraints are space-separated entities, not comma-separated.  As
 
1891
    bundle_data is a dictionary, the changes occur in place.
 
1892
    """
 
1893
    services = bundle_data.get('services')
 
1894
    if services:
 
1895
        for service, service_data in services.items():
 
1896
            constraints = service_data.get('constraints')
 
1897
            if constraints:
 
1898
                parsed = parse_constraints(constraints)
 
1899
                pairs = ['{}={}'.format(k, v)
 
1900
                         for k, v in sorted(parsed.items())]
 
1901
                service_data['constraints'] = ' '.join(pairs)
 
1902
 
 
1903
 
1887
1904
def make_constraints_space_separated(basket):
1888
1905
    """Perform any manipulation on the deployer file before storing.
1889
1906
 
1890
1907
    :input: basket - The YAML string representing the bundles.yaml file.
1891
1908
    :returns: Manipulated YAML string.
1892
1909
    """
1893
 
    # Convert constraints to space separated, whether it needs it or not.
 
1910
    # Convert constraints to space-separated, whether it needs it or not.
1894
1911
    data = yaml.load(basket)
1895
 
    for bundle, bundle_data in data.items():
1896
 
        services = bundle_data.get('services')
1897
 
        if services:
1898
 
            for service, service_data in services.items():
1899
 
                constraints = service_data.get('constraints')
1900
 
                if constraints:
1901
 
                    parsed = parse_constraints(constraints)
1902
 
                    pairs = ['{}={}'.format(k, v)
1903
 
                             for k, v in sorted(parsed.items())]
1904
 
                    service_data['constraints'] = ' '.join(pairs)
 
1912
    for bundle_data in data.values():
 
1913
        convert_bundle_constraints(bundle_data)
1905
1914
    return yaml.dump(data, default_flow_style=False)
1906
1915
 
1907
1916
 
 
1917
def save_file(fs, bytes_, content_type=None):
 
1918
    """Save the bytes to the file system."""
 
1919
    if content_type is None:
 
1920
        content_type = magic.from_buffer(bytes_, mime=True)
 
1921
 
 
1922
    _id = hashlib.sha256(bytes_).hexdigest()
 
1923
    if not fs.exists(_id):
 
1924
        fs.put(bytes_, contentType=content_type, _id=_id)
 
1925
    return _id
 
1926
 
 
1927
 
1908
1928
def slurp_files(fs, tree, logger=None, entry_source=None):
1909
1929
    """Store files in a gridFS, returning a mapping of paths to content hashes.
1910
1930