Skip to content

jakekara/metalink-author-py

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 

Metalink-author

A library for generating Metalink files. Metalink is a format for describing where files can be downloaded. The RFC is available here: https://tools.ietf.org/html/rfc5854.

This library does not support the full Metalink format, but it's easily extensible by adding classes for each property supported in the RFC. I've only implemented the ones I needed for the project that I built this tool for.

Usage

This code is in example.py:

from MetalinkAuthor.MetalinkAuthor import MetalinkEntry, MetalinkDocument, MetalinkProperties

print(MetalinkDocument()\
      .addEntry(
        MetalinkEntry("somefile.mov")\
        .addProperty(MetalinkProperties.SizeProperty(100 * 1000 * 100))\
        .addProperty(MetalinkProperties.URLProperty("https://example.com"))\
        .addProperty(MetalinkProperties.HashProperty("123456789ABCDEF"))
      )\
      .addEntry(
        MetalinkEntry("somefile-2.mov")\
        .addProperty(MetalinkProperties.SizeProperty(200 * 1000 * 100))\
        .addProperty(MetalinkProperties.URLProperty("https://example.com/1"))\
        .addProperty(MetalinkProperties.HashProperty("ABCDEFG-12345"))
      ).tostring()
     )

Extending

I have only supported a few properties that I needed for a project, but to make this fully support the Metalink spec, this just needs appropriate subclasses added to MetalinkAuthor/MetalinkProperties.py folder. Most of them are extremely basic. If it's just a property that has a tag with text content, you can just set the class property "key". For instance:

class LanguageProperty(BasicProperty):
    key = "language"


class DescriptionProperty(BasicProperty):
    key = "description"

For slightly more complicated elements, like the HashProperty, which has an attribute, you may need to override the constructor. It's only a couple more lines of code:

class HashProperty(BasicProperty):
    key = "hash"

    # Override to require a string value and allow an optional hash_type
    def __init__(self, value: str, hash_type="md5"):
        super(HashProperty, self).__init__(value)
        super(HashProperty, self).setAttribute("type", hash_type)

About

A python library for authoring Metalink XML documents

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages