| Index: mozdownload/utils.py | 
| diff --git a/mozdownload/utils.py b/mozdownload/utils.py | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..ddd4491b647cf574969531d41348206747ef65f4 | 
| --- /dev/null | 
| +++ b/mozdownload/utils.py | 
| @@ -0,0 +1,32 @@ | 
| +# This Source Code Form is subject to the terms of the Mozilla Public | 
| +# License, v. 2.0. If a copy of the MPL was not distributed with this | 
| +# file, You can obtain one at http://mozilla.org/MPL/2.0/. | 
| + | 
| +"""Module to store various helper functions used in mozdownload.""" | 
| + | 
| +import hashlib | 
| + | 
| + | 
| +def urljoin(*fragments): | 
| +    """Concatenates multi part strings into urls""" | 
| + | 
| +    # Strip possible already existent final slashes of fragments except for the last one | 
| +    parts = [fragment.rstrip('/') for fragment in fragments[:len(fragments) - 1]] | 
| +    parts.append(fragments[-1]) | 
| + | 
| +    return '/'.join(parts) | 
| + | 
| + | 
| +def create_md5(path): | 
| +    """Creates the md5 hash of a file using the hashlib library""" | 
| + | 
| +    m = hashlib.md5() | 
| +    # rb necessary to run correctly in windows. | 
| +    with open(path, "rb") as f: | 
| +        while True: | 
| +            data = f.read(8192) | 
| +            if not data: | 
| +                break | 
| +            m.update(data) | 
| + | 
| +    return m.hexdigest() | 
|  |