summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* label: check parttypes identity typeJose M. Guisado2023-01-111-2/+18
| | | | | | | | | | | | | | | parttypes can be either: - A code for MBR/DOS - An UUID for GPT User needs a label instance before using a parttype getter. If checking for a parttype using a code, check if the current label support that kind of parttype identification before retrieving it. Same applies for UUID based parttypes. If wrong identity type is used, raise an exception. Errors regarding parttype are more informative this way.
* add 'string' field getter to parttypeJose M. Guisado2023-01-111-0/+6
| | | | | | | | | | | | | | | | 'string' getter wraps fdisk_parttype_get_string to fetch the partition type UUID in case of a GPT label device. This is useful to confirm or check the partition type UUID of any device with a GPT label. >>> import fdisk >>> cxt = fdisk.Context('./disk.bin', readonly=False) >>> pa = cxt.partitions[0] >>> pa.type.string 'C12A7328-F81F-11D2-BA4B-00A0C93EC93B' >>> pa.type.name 'EFI System'
* context: fix assign_deviceJose M. Guisado2023-01-101-6/+6
| | | | | | | | | | | | | | | | | | | | Fixes a bug where calling assign_device with readonly keyword parameter raises exception stating it takes no keyword arguments. Context_assign_device has positional and keyword arguments. Adds flags METH_KEYWORDS in method declaration (see Context_methods). Replaces format string in PyArg_ParseTupleAndKeywords from "s|p" to "s|$p". Adds $ after |, meaning all later optional arguments are also keyword only. (See https://docs.python.org/3/c-api/arg.html#other-objects) Empty names in the kwlist array correspond to positional arguments. Replaces fname variable name with device for better readability. Fixes 88c7374db2309e708e9f9713a3d55acb1472f339 ("context: check self->cxt and rc in assign_device")
* release: bump to version 1.1v1.1Jose M. Guisado2022-12-201-1/+1
|
* context: check self->cxt and rc in assign_deviceJose M. Guisado2022-12-201-2/+10
| | | | | | | Assert self->cxt before calling libfdisk fdisk_assign_device. Also check for its return code and raise exception if libfdisk report any error assigning the device.
* context: add readonly optional param to assign_deviceJose M. Guisado2022-12-201-7/+7
| | | | | assign_device with readonly set to false by default to keep consistency with Context object constructor.
* context: add label to repr functionJose M. Guisado2022-12-201-1/+7
| | | | | | | | | | | | | | | | Adds label information to context repr function. %R is used to get the repr result of a PyObject, in this case this object is the LabelObject representing the context's label information. Helps showing more of the context information when printing out a context object instance. >>> import fdisk >>> cxt = fdisk.Context('disk.bin') >>> cxt <libfdisk.Context object at 0x7fec52f39330, label=<libfdisk.Label object at 0x7fec52f39310, name=gpt>, details=True, readonly=False>
* context: delete unused label fieldJose M. Guisado2022-12-202-3/+0
| | | | | | | | | | | | It's not necessary to store the label in the context type, instead use the corresponding library function to get the current in-memory label container. The device label information is stored in-memory by libfdisk library when creating a context or assigning a device. Avoids possible incosistencies between libfdisk in-memory label and python-libfdisk context type label information.
* context: don't raise exception when no partitions foundJose M. Guisado2022-12-201-10/+2
| | | | | | | | | Allows creation of a context object or device assign if no label is present in the device. This case is not frecuent but not critical, do not raise an exception. For example, a brand new disk with no label or a raw virtual disk image with no label.
* fdisk: declare kwlist array staticJose M. Guisado2022-12-153-6/+3
|
* fdisk: remove unuseful commentJose M. Guisado2022-12-151-5/+1
| | | | | | | Some of python-libfdisk is inspired by the python bindings of libmount (from util-linux project). Remove a comment from pylibmount that slipped into python-libfdisk
* fdisk: add set_PyErr_from_rcJose M. Guisado2022-12-154-12/+44
| | | | | | | | | python-libfdisk raises Python exceptions when the libfdisk reports an error when executing some function. libfdisk returns negative errno values when reporting some error. Adds utility function to set PyErr string based on the strerror of a given errno code. Useful when raising Python exceptions.
* coding style: line breaksJose M. Guisado2022-12-155-11/+26
| | | | | | | | | Only two line breaks separate copyright notice from source. For the rest of the source file any function declaration or similar block is separated with a line break from any other block. Except when a python function definition is previously followed by a docstring #define block.
* context: add_partition returns partnoJose M. Guisado2022-12-151-3/+4
| | | | | | | libfdisk context add_partition function initializes a passed argument with the new partition's partno. If add_partition is successful, return its partno.
* partition: add partition type getsetJose M. Guisado2022-12-151-0/+31
| | | | | | | | | | | | | | | | | | | | | | | | Partition type getset enables modifying and getting the type of a give libfdisk partition. The type of a partition is defined using PartType, which can only be instanced via label specific functions get_parttype_from_string or get_parttype_from_code. For example, to set the type of a new partitions to 'EFI System': >>> import fdisk >>> pa = fdisk.Partition() >>> pa.type >>> cxt = fdisk.Context('./disk.bin', readonly=False) >>> cxt.create_disklabel('gpt') >>> efitype = cxt.label.get_parttype_from_string("c12a7328-f81f-11d2-ba4b-00a0c93ec93b") >>> pa.type = efitype Following the previous example, getting its current partition type: >>> pa.type <libfdisk.PartType object at 0x7f2f0a9a12d0, name=EFI System>
* parttype: add parttype class and functionsJose M. Guisado2022-12-155-1/+138
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Parttype is a container for partition types in libfdisk. In python-libfdisk, the only way to create parttype instances is using the corresponding label-specific function: get_parttype_from_{code,string} This function wraps libfdisk's label_get_parttype_from_code (lookup DOS label parttype by hex code) and label_get_parttype_from_string (lookup GPT parttype by type uuid) For example, to get the parttype instance of 'EFI System' partition type of a GPT label, with type uuid 'c12a7328-f81f-11d2-ba4b-00a0c93ec93b': >>> import fdisk >>> cxt = fdisk.Context('./disk.bin', readonly=False) >>> cxt.create_disklabel('gpt') >>> efitype = cxt.label.get_parttype_from_string("c12a7328-f81f-11d2-ba4b-00a0c93ec93b") >>> efitype <libfdisk.PartType object at 0x7f503e4a5270, name=EFI System> See: https://cdn.kernel.org/pub/linux/utils/util-linux/v2.34/libfdisk-docs/libfdisk-Partition-types.html https://cdn.kernel.org/pub/linux/utils/util-linux/v2.34/libfdisk-docs/libfdisk-Label.html#fdisk-label-get-parttype-from-code https://cdn.kernel.org/pub/linux/utils/util-linux/v2.34/libfdisk-docs/libfdisk-Label.html#fdisk-label-get-parttype-from-string
* partition: add *_follow_default optional paramsJose M. Guisado2022-12-151-9/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add optional parameters inside init function of partition. Optional parameters refer to: - partno_follow_default - start_follow_default - end_follow_default These options can be used in order to enable or disable default partno, start and end value when adding partitions. With those optional parameters enabled by default a user is able to add a partition into the context label without specifying any attribute. >>> import fdisk >>> cxt = fdisk.Context('./disk.bin', readonly=False) >>> cxt.create_disklabel('gpt') >>> pa = fdisk.Partition() >>> cxt.add_partition(pa) This enables: - "Filling" the rest of the disk with last partition - No need to track start/end sector for any following partition - No need to track next partno number for any following partition See: https://cdn.kernel.org/pub/linux/utils/util-linux/v2.34/libfdisk-docs/libfdisk-Partition.html#fdisk-partition-partno-follow-default https://cdn.kernel.org/pub/linux/utils/util-linux/v2.34/libfdisk-docs/libfdisk-Partition.html#fdisk-partition-start-follow-default https://cdn.kernel.org/pub/linux/utils/util-linux/v2.34/libfdisk-docs/libfdisk-Partition.html#fdisk-partition-end-follow-default
* context: add add_partition methodJose M. Guisado2022-12-152-0/+27
| | | | | | | | This method wraps fdisk_add_partition. Allows modifying in-memory partition table of a given context. Remember that changes need to be written to disk using the relevant fdisk_write_disklabel function wrapper.
* partition: add partno setterJose M. Guisado2022-12-151-4/+57
| | | | | | | | | | | | | | | | | Allows changing in-memory partno field of a Partition instance: >>> import fdisk >>> pa = fdisk.Partition() >>> pa.partno = 3 >>> pa <libfdisk.Partition object at 0x7f4603a38f30, partno=3> If partno is unset repr shows 'None': >>> import fdisk >>> pa = fdisk.Partition() >>> pa <libfdisk.Partition object at 0x7f86c4338f30, partno=None>
* partition: return None if partno is unsetJose M. Guisado2022-12-151-2/+1
| | | | | | | Undefined values in libfdisk should map to None type in Python. Py_BuildValue("%d", -1); is also incorrectly formatted and raises an error when executed.
* context: add disklabel creation and writingJose M. Guisado2022-12-151-0/+36
| | | | | | | | | Adds wrappers for following label related functions from libfdisk: - fdisk_create_disklabel - fdisk_write_disklabel These functions are declared as methods of a Context python object.
* context: rename set_size_unit variablesJose M. Guisado2022-12-151-3/+3
| | | | | | Renames 'cval' to 'szunit' for better readability. This variable is used to store the size_unit constant that is going to be set using fdisk_set_size_unit.
* context: add readonly parameterJose M. Guisado2022-12-151-10/+11
| | | | | | | | fdisk_assign_device() contains 'readonly' parameter to indicate how to open the device. Assigned device 'readonly' must be false (0) in order to write in-memory changes to it.
* context: add size_unit getsetJose M. Guisado Gomez2022-06-071-0/+30
| | | | | | | | | | | | | | | | | | | | | | | | Size unit can be get or set using 'size_unit' context member. >>> for pa in cxt.partitions: ... cxt.partition_to_string(pa, fdisk.FDISK_FIELD_SIZE) ... '114.6G' >>> cxt.size_unit 0 >>> cxt.size_unit == fdisk.FDISK_SIZEUNIT_HUMAN True >>> cxt.size_unit = fdisk.FDISK_SIZEUNIT_BYTES >>> for pa in cxt.partitions: ... cxt.partition_to_string(pa, fdisk.FDISK_FIELD_SIZE) ... '123010531328' Use fdisk_get_size_unit to get size unit value. https://cdn.kernel.org/pub/linux/utils/util-linux/v2.34/libfdisk-docs/libfdisk-Context.html#fdisk-get-size-unit Use fdisk_set_size_unit to set size unit value. https://cdn.kernel.org/pub/linux/utils/util-linux/v2.34/libfdisk-docs/libfdisk-Context.html#fdisk-set-size-unit
* Use c99 struct initializationJose M. Guisado Gomez2022-04-283-111/+34
| | | | Declutters PyTypeObject struct initialization when declaring new types.
* context: rename parts to partitionsJose M. Guisado Gomez2022-04-281-2/+2
|
* fdisk.c: add partition module objectJose M. Guisado Gomez2022-04-262-0/+2
| | | | | | | | | | | | | | | | Call Partition_AddModuleObject when initializing the python module. Fixes bug when using the Partition class but the class has not been added to the module via Py_TypeReady. A common error was the type not being ready (missing attributes): >>> for pa in cxt.parts: ... print(pa.partno) ... Traceback (most recent call last): File "<stdin>", line 2, in <module> AttributeError: 'libfdisk.Partition' object has no attribute 'partno'
* Add COPYING and license headersJose M. Guisado Gomez2022-04-076-0/+562
| | | | LGPL2.1 or later.
* Add MANIFEST.inJose M. Guisado Gomez2022-04-061-0/+1
| | | | Add MANIFEST.in to include .h files in source distributions.
* Initial commitJose M. Guisado Gomez2022-04-067-0/+796
Add sources, setup.py and .gitignore Build/Install: python setup.py build python setup.py install