Example: Forcing consistency
As discussed in the example introduction, PyCdlib takes a lazy approach to updating metadata. For performance reasons it is recommended to let PyCdlib handle when and how to update the metadata, but sometimes users need the metadata to be consistent immediately. PyCdlib offers two solutions for this:
- There is an API called force_consistency that immediately updates all metadata to the latest.
- When initially creating the PyCdlib object, the user can set the
always_consistent
parameter. When this is True, PyCdlib will update the metadata after every operation, ensuring that it is always up-to-date.
Of the two, using lazy metadata updating and only calling force_consistency when absolutely needed is highly preferred. Using always_consistent
is only needed in specialized cases (such as first modifying, then introspecting the extent number that a file exists on the ISO). The following example will use force_consistency at a particular point to cause the metadata to be updated. To learn how to use always_consistent
, please see the documentation for the __init__
method for PyCdlib.
Here’s the complete code for the example:
try:
from cStringIO import StringIO as BytesIO
except ImportError:
from io import BytesIO
import pycdlib
iso = pycdlib.PyCdlib()
iso.new()
foostr = b'foo\n'
iso.add_fp(BytesIO(foostr), len(foostr), '/FOO.;1')
iso.force_consistency()
iso.add_directory('/DIR1')
iso.write('new.iso')
iso.close()
Let’s take a closer look at the code.
try:
from cStringIO import StringIO as BytesIO
except ImportError:
from io import BytesIO
import pycdlib
As in earlier examples, import the relevant libraries, including pycdlib itself.
iso = pycdlib.PyCdlib()
iso.new()
As in earlier examples, create a new PyCdlib object and then create a new ISO with no extensions.
foostr = b'foo\n'
iso.add_fp(BytesIO(foostr), len(foostr), '/FOO.;1')
As in earlier examples, add a new file to the ISO.
iso.force_consistency()
Now force consistency on the ISO. This will cause PyCdlib to update all of the metadata on the ISO, and after this call all of the metadata for all entries on the ISO will be accurate.
iso.add_directory('/DIR1')
As in earlier examples, add a new directory to the ISO. Note that the metadata on the ISO is now out-of-date again, so to accurately look at the metadata, force_consistency would have to be called again after this modification.
iso.write('new.iso')
As in earlier examples, write the ISO out to a file. The write method implicitly does a metadata update since it needs all of the metadata to be accurate to successfully write out the ISO.
iso.close()
As in earlier examples, close the PyCdlib object when we are done with it.