Current File : //usr/lib/python3/dist-packages/s3transfer/__pycache__/manager.cpython-312.pyc
�

�<�e[o��0�ddlZddlZddlZddlZddlmZmZddlmZm	Z	m
Z
ddlmZddl
mZddlmZddlmZmZddlmZmZmZmZmZmZdd	lmZdd
lmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%ejLe'�Z(Gd�d�Z)Gd
�d�Z*Gd�d�Z+y)�N)�BandwidthLimiter�LeakyBucket)�ALLOWED_DOWNLOAD_ARGS�KB�MB)�CopySubmissionTask)�DeleteSubmissionTask)�DownloadSubmissionTask)�CancelledError�
FatalError)�IN_MEMORY_DOWNLOAD_TAG�IN_MEMORY_UPLOAD_TAG�BoundedExecutor�TransferCoordinator�TransferFuture�TransferMeta)�UploadSubmissionTask)�CallArgs�OSUtils�SlidingWindowSemaphore�
TaskSemaphore�add_s3express_defaults�
get_callbacks�signal_not_transferring�signal_transferringc�D�eZdZdezdezddddddezddddfd�Zd�Zy)	�TransferConfig��
�i��Nc
���||_||_||_||_||_||_||_||_|	|_|
|_	||_
||_|j�y)asConfigurations for the transfer manager

        :param multipart_threshold: The threshold for which multipart
            transfers occur.

        :param max_request_concurrency: The maximum number of S3 API
            transfer-related requests that can happen at a time.

        :param max_submission_concurrency: The maximum number of threads
            processing a call to a TransferManager method. Processing a
            call usually entails determining which S3 API requests that need
            to be enqueued, but does **not** entail making any of the
            S3 API data transferring requests needed to perform the transfer.
            The threads controlled by ``max_request_concurrency`` is
            responsible for that.

        :param multipart_chunksize: The size of each transfer if a request
            becomes a multipart transfer.

        :param max_request_queue_size: The maximum amount of S3 API requests
            that can be queued at a time.

        :param max_submission_queue_size: The maximum amount of
            TransferManager method calls that can be queued at a time.

        :param max_io_queue_size: The maximum amount of read parts that
            can be queued to be written to disk per download. The default
            size for each elementin this queue is 8 KB.

        :param io_chunksize: The max size of each chunk in the io queue.
            Currently, this is size used when reading from the downloaded
            stream as well.

        :param num_download_attempts: The number of download attempts that
            will be tried upon errors with downloading an object in S3. Note
            that these retries account for errors that occur when streaming
            down the data from s3 (i.e. socket errors and read timeouts that
            occur after receiving an OK response from s3).
            Other retryable exceptions such as throttling errors and 5xx errors
            are already retried by botocore (this default is 5). The
            ``num_download_attempts`` does not take into account the
            number of exceptions retried by botocore.

        :param max_in_memory_upload_chunks: The number of chunks that can
            be stored in memory at a time for all ongoing upload requests.
            This pertains to chunks of data that need to be stored in memory
            during an upload if the data is sourced from a file-like object.
            The total maximum memory footprint due to a in-memory upload
            chunks is roughly equal to:

                max_in_memory_upload_chunks * multipart_chunksize
                + max_submission_concurrency * multipart_chunksize

            ``max_submission_concurrency`` has an affect on this value because
            for each thread pulling data off of a file-like object, they may
            be waiting with a single read chunk to be submitted for upload
            because the ``max_in_memory_upload_chunks`` value has been reached
            by the threads making the upload request.

        :param max_in_memory_download_chunks: The number of chunks that can
            be buffered in memory and **not** in the io queue at a time for all
            ongoing download requests. This pertains specifically to file-like
            objects that cannot be seeked. The total maximum memory footprint
            due to a in-memory download chunks is roughly equal to:

                max_in_memory_download_chunks * multipart_chunksize

        :param max_bandwidth: The maximum bandwidth that will be consumed
            in uploading and downloading file content. The value is in terms of
            bytes per second.
        N)
�multipart_threshold�multipart_chunksize�max_request_concurrency�max_submission_concurrency�max_request_queue_size�max_submission_queue_size�max_io_queue_size�io_chunksize�num_download_attempts�max_in_memory_upload_chunks�max_in_memory_download_chunks�
max_bandwidth�_validate_attrs_are_nonzero)
�selfr#r$r%r&r'r(r)r*r+r,r-r.s
             �4/usr/lib/python3/dist-packages/s3transfer/manager.py�__init__zTransferConfig.__init__0sq��l$7�� �#6�� �'>��$�*D��'�&<��#�)B��&�!2���(���%:��"�+F��(�-J��*�*����(�(�*�c�|�|jj�D]\}}|��	|dks�td|�d|�d���y)NrzProvided parameter z
 of value z must be greater than 0.)�__dict__�items�
ValueError)r0�attr�attr_vals   r1r/z*TransferConfig._validate_attrs_are_nonzero�sE��"�m�m�1�1�3�	�N�D�(��#��A�
� � �(�,���	r3)�__name__�
__module__�__qualname__rrr2r/�r3r1rr/s@����F���F� "�#$�#�"&���2�X��$&�&(��b+�Hr3rc��eZdZeZgd�Zegd�zZgd�ZdZdejd�iZ
dd�Zed	��Z
ed
��Zdd�Z	dd�Z			dd
�Zdd�Zd�Zd�Zd�Z	dd�Zd�Zd�Zd�Zd�Zd�Zdd�Zefd�Zy)�TransferManager)�ACL�CacheControl�ChecksumAlgorithm�ContentDisposition�ContentEncoding�ContentLanguage�ContentType�ExpectedBucketOwner�Expires�GrantFullControl�	GrantRead�GrantReadACP�
GrantWriteACP�Metadata�ObjectLockLegalHoldStatus�ObjectLockMode�ObjectLockRetainUntilDate�RequestPayer�ServerSideEncryption�StorageClass�SSECustomerAlgorithm�SSECustomerKey�SSECustomerKeyMD5�SSEKMSKeyId�SSEKMSEncryptionContext�Tagging�WebsiteRedirectLocation)	�CopySourceIfMatch�CopySourceIfModifiedSince�CopySourceIfNoneMatch�CopySourceIfUnmodifiedSince�CopySourceSSECustomerAlgorithm�CopySourceSSECustomerKey�CopySourceSSECustomerKeyMD5�MetadataDirective�TaggingDirective)�MFA�	VersionIdrQrGTzS3 Object LambdazV^arn:(aws).*:s3-object-lambda:[a-z\-0-9]+:[0-9]{12}:accesspoint[/:][a-zA-Z0-9\-]{1,63}Nc
�r�||_||_|�t�|_||_|�t	�|_t�|_d|_t|jj|jjtt|jj�tt|jj �i|��|_t|jj$|jj&|��|_t|jj*d|��|_d|_|jj0�Yt2j5d|jj0�t7|jj0�}t9|�|_|j;�y)aA transfer manager interface for Amazon S3

        :param client: Client to be used by the manager
        :param config: TransferConfig to associate specific configurations
        :param osutil: OSUtils object to use for os-related behavior when
            using with transfer manager.

        :type executor_cls: s3transfer.futures.BaseExecutor
        :param executor_cls: The class of executor to use with the transfer
            manager. By default, concurrent.futures.ThreadPoolExecutor is used.
        Nr)�max_size�max_num_threads�tag_semaphores�executor_cls)rgrhrj�zSetting max_bandwidth to %s)�_client�_configr�_osutilr�TransferCoordinatorController�_coordinator_controller�_id_counterrr'r%rrr,r
rr-�_request_executorr(r&�_submission_executorr)�_io_executor�_bandwidth_limiterr.�logger�debugrr�_register_handlers)r0�client�config�osutilrj�leaky_buckets      r1r2zTransferManager.__init__�s_���������>�)�+�D�L�����>�"�9�D�L�'D�'F��$����"1��\�\�8�8� �L�L�@�@�$�m��L�L�<�<�'�'�(>��L�L�>�>�)�	�&�"
��� %4��\�\�;�;� �L�L�C�C�%�%
��!�,��\�\�3�3��%�
���#'����<�<�%�%�1��L�L�-�t�|�|�/I�/I�
�'�t�|�|�'A�'A�B�L�&6�|�&D�D�#����!r3c��|jS�N)rl�r0s r1ryzTransferManager.client����|�|�r3c��|jSr~)rmrs r1rzzTransferManager.config r�r3c��|�i}|�g}|j||j�|j|�|j||�t	|||||��}i}|j
r|j
|d<|j
|t|�S)a�Uploads a file to S3

        :type fileobj: str or seekable file-like object
        :param fileobj: The name of a file to upload or a seekable file-like
            object to upload. It is recommended to use a filename because
            file-like objects may result in higher memory usage.

        :type bucket: str
        :param bucket: The name of the bucket to upload to

        :type key: str
        :param key: The name of the key to upload to

        :type extra_args: dict
        :param extra_args: Extra arguments that may be passed to the
            client operation

        :type subscribers: list(s3transfer.subscribers.BaseSubscriber)
        :param subscribers: The list of subscribers to be invoked in the
            order provided based on the event emit during the process of
            the transfer request.

        :rtype: s3transfer.futures.TransferFuture
        :returns: Transfer future representing the upload
        )�fileobj�bucket�key�
extra_args�subscribers�bandwidth_limiter)�_validate_all_known_args�ALLOWED_UPLOAD_ARGS�_validate_if_bucket_supported�_add_operation_defaultsrru�_submit_transferr)r0r�r�r�r�r��	call_args�extra_main_kwargss        r1�uploadzTransferManager.upload$s���4���J����K��%�%�j�$�2J�2J�K��*�*�6�2��$�$�V�Z�8�����!�#�
�	����"�"�59�5L�5L��1�2��$�$��+�->�
�	
r3c��|�i}|�g}|j||j�|j|�t|||||��}d|ji}|j
r|j
|d<|j
|t|�S)a�Downloads a file from S3

        :type bucket: str
        :param bucket: The name of the bucket to download from

        :type key: str
        :param key: The name of the key to download from

        :type fileobj: str or seekable file-like object
        :param fileobj: The name of a file to download or a seekable file-like
            object to download. It is recommended to use a filename because
            file-like objects may result in higher memory usage.

        :type extra_args: dict
        :param extra_args: Extra arguments that may be passed to the
            client operation

        :type subscribers: list(s3transfer.subscribers.BaseSubscriber)
        :param subscribers: The list of subscribers to be invoked in the
            order provided based on the event emit during the process of
            the transfer request.

        :rtype: s3transfer.futures.TransferFuture
        :returns: Transfer future representing the download
        )r�r�r�r�r��io_executorr�)r�rr�rrtrur�r
)r0r�r�r�r�r�r�r�s        r1�downloadzTransferManager.downloadSs���8���J����K��%�%�j�$�2L�2L�M��*�*�6�2�����!�#�
�	�+�D�,=�,=�>���"�"�59�5L�5L��1�2��$�$��-�/@�
�	
r3c�6�|�i}|�g}|�|j}|j||j�t|t�r |j|j
d��|j|�t||||||��}|j|t�S)a�Copies a file in S3

        :type copy_source: dict
        :param copy_source: The name of the source bucket, key name of the
            source object, and optional version ID of the source object. The
            dictionary format is:
            ``{'Bucket': 'bucket', 'Key': 'key', 'VersionId': 'id'}``. Note
            that the ``VersionId`` key is optional and may be omitted.

        :type bucket: str
        :param bucket: The name of the bucket to copy to

        :type key: str
        :param key: The name of the key to copy to

        :type extra_args: dict
        :param extra_args: Extra arguments that may be passed to the
            client operation

        :type subscribers: a list of subscribers
        :param subscribers: The list of subscribers to be invoked in the
            order provided based on the event emit during the process of
            the transfer request.

        :type source_client: botocore or boto3 Client
        :param source_client: The client to be used for operation that
            may happen at the source object. For example, this client is
            used for the head_object that determines the size of the copy.
            If no client is provided, the transfer manager's client is used
            as the client for the source object.

        :rtype: s3transfer.futures.TransferFuture
        :returns: Transfer future representing the copy
        �Bucket)�copy_sourcer�r�r�r��
source_client)
rlr��ALLOWED_COPY_ARGS�
isinstance�dictr��getrr�r)r0r�r�r�r�r�r�r�s        r1�copyzTransferManager.copy�s���V���J����K�� � �L�L�M��%�%�j�$�2H�2H�I��k�4�(��.�.�{���x�/H�I��*�*�6�2��#���!�#�'�

�	��$�$�Y�0B�C�Cr3c��|�i}|�g}|j||j�|j|�t||||��}|j	|t
�S)a�Delete an S3 object.

        :type bucket: str
        :param bucket: The name of the bucket.

        :type key: str
        :param key: The name of the S3 object to delete.

        :type extra_args: dict
        :param extra_args: Extra arguments that may be passed to the
            DeleteObject call.

        :type subscribers: list
        :param subscribers: A list of subscribers to be invoked during the
            process of the transfer request.  Note that the ``on_progress``
            callback is not invoked during object deletion.

        :rtype: s3transfer.futures.TransferFuture
        :return: Transfer future representing the deletion.

        )r�r�r�r�)r��ALLOWED_DELETE_ARGSr�rr�r	)r0r�r�r�r�r�s      r1�deletezTransferManager.delete�sj��,���J����K��%�%�j�$�2J�2J�K��*�*�6�2����!�#�	
�	��$�$�Y�0D�E�Er3c��|jrD|jj�D]&\}}|j|�}|s�t	d|z��yy)NzTTransferManager methods do not support %s resource. Use direct client calls instead.)� VALIDATE_SUPPORTED_BUCKET_VALUES�_UNSUPPORTED_BUCKET_PATTERNSr6�matchr7)r0r��resource�patternr�s     r1r�z-TransferManager._validate_if_bucket_supported�sb���0�0�%)�%F�%F�%L�%L�%N�
�!��'��
�
�f�-���$�E�GO�P���
�1r3c	�Z�|D]&}||vs�td|�ddj|�����y)NzInvalid extra_args key 'z', must be one of: z, )r7�join)r0�actual�allowed�kwargs    r1r�z(TransferManager._validate_all_known_args�s:���	�E��G�#� �,1�4�9�9�W�3E�G���	r3c��t||�yr~)r)r0r�r�s   r1r�z'TransferManager._add_operation_defaults�s���v�z�2r3c��|si}|j|�\}}t|d�D]}|dj|��|j||�}|jj||d|���|xjdz
c_|S)N�done�coordinator)�transfer_coordinator�main_kwargsrk)�_get_future_with_componentsr�add_done_callback� _get_submission_task_main_kwargsrs�submitrq)r0r��submission_task_clsr��transfer_future�
components�callbackr�s        r1r�z TransferManager._submit_transfer�s���!� "��'+�&F�&F��'
�#���&�o�v�>�	B�H��}�%�7�7��A�	B��;�;��.�
��	
�!�!�(�(��%/�
�%>�'�
�	
�	
���A����r3c���|j}t|��}|jj|�|j	|jj
|�t
||��|d�}tdi|��}||fS)N)�transfer_id)�metar�r=)rqrrp�add_transfer_coordinatorr��remove_transfer_coordinatorrr)r0r�r�r�r�r�s      r1r�z+TransferManager._get_future_with_components!s����&�&��2�{�K���$�$�=�=� �	
�
	�.�.��(�(�D�D� �	
�
!���D�/�
�
�)�6�:�6���
�*�*r3c��|j|j|j|j|d�}|j	|�|S)N)ryrzr{�request_executorr�)rlrmrnrr�update)r0r�r�r�s    r1r�z0TransferManager._get_submission_task_main_kwargs6sC���l�l��l�l��l�l� $� 6� 6�.�
��	���,�-��r3c���d}|jjjj|td��|jjjj|td��y)Nzrequest-created.s3zs3upload-not-transferring)�	unique_idzs3upload-transferring)rlr��events�register_firstr�
register_lastr)r0�
event_names  r1rxz"TransferManager._register_handlersCsa��)�
������ � �/�/��#�1�	0�	
�
	
����� � �.�.��+�7N�	/�	
r3c��|Sr~r=rs r1�	__enter__zTransferManager.__enter__Os���r3c��d}d}t}|r0d}t|�}|st|�}t|t�rt
}|j
|||�y)NF�T)r�str�reprr��KeyboardInterruptr�	_shutdown)r0�exc_type�	exc_value�args�cancel�
cancel_msg�cancel_exc_types       r1�__exit__zTransferManager.__exit__RsR�����
�$����F��Y��J��!�)�_�
��)�%6�7�"0�����v�z�?�;r3c�*�|j|||�y)a�Shutdown the TransferManager

        It will wait till all transfers complete before it completely shuts
        down.

        :type cancel: boolean
        :param cancel: If True, calls TransferFuture.cancel() for
            all in-progress in transfers. This is useful if you want the
            shutdown to happen quicker.

        :type cancel_msg: str
        :param cancel_msg: The message to specify if canceling all in-progress
            transfers.
        N)r�)r0r�r�s   r1�shutdownzTransferManager.shutdowncs��	
���v�v�z�2r3c��|r|jj||�	|jj�	|jj�|jj�|jj�y#t$r|jjd��wxYw#|jj�|jj�|jj�wxYw)NzKeyboardInterrupt())rpr��waitr�rsr�rrrt)r0r�r�r�s    r1r�zTransferManager._shutdownts����
�(�(�/�/�
�H�E�	)�
�(�(�-�-�/�
�%�%�.�.�0��"�"�+�+�-����&�&�(��!�	�
�(�(�/�/�0E�F��	��
�%�%�.�.�0��"�"�+�+�-����&�&�(�s�B
�
&B0�0B3�3AD)NNN)NNr~)Fr�)r:r;r<rr�r�r�r��re�compiler�r2�propertyryrzr�r�r�r�r�r�r�r�r�r�rxr�r�r�rr�r=r3r1r?r?�s���1����<,�
/�
����(,�$�	�J�B�J�J�
2�
�$� �@"�D��������-
�`BF�.
�j���=D�~"F�H��3�AE�!�F+�*�

��<�"3�"6D�)r3r?c�@�eZdZd�Zed��Zd�Zd�Zdefd�Z	d�Z
y)	roc�T�tj�|_t�|_y)z�Abstraction to control all transfer coordinators

        This abstraction allows the manager to wait for inprogress transfers
        to complete and cancel all inprogress transfers.
        N)�	threading�Lock�_lock�set�_tracked_transfer_coordinatorsrs r1r2z&TransferCoordinatorController.__init__�s���^�^�%��
�.1�e��+r3c��|j5tj|j�cddd�S#1swYyxYw)z.The set of transfer coordinators being trackedN)r�r�r�rs r1�tracked_transfer_coordinatorsz;TransferCoordinatorController.tracked_transfer_coordinators�s8���Z�Z�	B��9�9�T�@�@�A�		B�	B�	B�s�6�?c�|�|j5|jj|�ddd�y#1swYyxYw)z�Adds a transfer coordinator of a transfer to be canceled if needed

        :type transfer_coordinator: s3transfer.futures.TransferCoordinator
        :param transfer_coordinator: The transfer coordinator for the
            particular transfer
        N)r�r��add�r0r�s  r1r�z6TransferCoordinatorController.add_transfer_coordinator�s9���Z�Z�	J��/�/�3�3�4H�I�	J�	J�	J���2�;c�|�|j5|jj|�ddd�y#1swYyxYw)a�Remove a transfer coordinator from cancellation consideration

        Typically, this method is invoked by the transfer coordinator itself
        to remove its self when it completes its transfer.

        :type transfer_coordinator: s3transfer.futures.TransferCoordinator
        :param transfer_coordinator: The transfer coordinator for the
            particular transfer
        N)r�r��remover�s  r1r�z9TransferCoordinatorController.remove_transfer_coordinator�s9���Z�Z�	M��/�/�6�6�7K�L�	M�	M�	M�r�r�c�J�|jD]}|j||��y)aPCancels all inprogress transfers

        This cancels the inprogress transfers by calling cancel() on all
        tracked transfer coordinators.

        :param msg: The message to pass on to each transfer coordinator that
            gets cancelled.

        :param exc_type: The type of exception to set for the cancellation
        N)r�r�)r0�msgr�r�s    r1r�z$TransferCoordinatorController.cancel�s*��%)�$F�$F�	7� � �'�'��X�6�	7r3c���	d}|jD]}|j��y#t$r/tj	d�rtj	d|��t
$rYywxYw)z�Wait until there are no more inprogress transfers

        This will not stop when failures are encountered and not propagate any
        of these errors from failed transfers, but it can be interrupted with
        a KeyboardInterrupt.
        Nz$Received KeyboardInterrupt in wait()z'On KeyboardInterrupt was waiting for %s)r��resultr�rvrw�	Exceptionr�s  r1r�z"TransferCoordinatorController.wait�st��	�#'� �(,�(J�(J�
.�$�$�+�+�-�
.�� �
	��L�L�?�@�$����=�(��
��	�

�	�s�#&�?A(�'A(N)r:r;r<r2r�r�r�r�rr�r�r=r3r1roro�s:��4��B��B�J�M��n�7�r3ro),r��loggingr�r��s3transfer.bandwidthrr�s3transfer.constantsrrr�s3transfer.copiesr�s3transfer.deleter	�s3transfer.downloadr
�s3transfer.exceptionsrr�s3transfer.futuresr
rrrrr�s3transfer.uploadr�s3transfer.utilsrrrrrrrr�	getLoggerr:rvrr?ror=r3r1�<module>r�s�����	��>�>�>�0�2�6�<���3�	�	�	�
��	�	�8�	$��k�k�\m)�m)�`S�Sr3
¿Qué es la limpieza dental de perros? - Clínica veterinaria


Es la eliminación del sarro y la placa adherida a la superficie de los dientes mediante un equipo de ultrasonidos que garantiza la integridad de las piezas dentales a la vez que elimina en profundidad cualquier resto de suciedad.

A continuación se procede al pulido de los dientes mediante una fresa especial que elimina la placa bacteriana y devuelve a los dientes el aspecto sano que deben tener.

Una vez terminado todo el proceso, se mantiene al perro en observación hasta que se despierta de la anestesia, bajo la atenta supervisión de un veterinario.

¿Cada cuánto tiempo tengo que hacerle una limpieza dental a mi perro?

A partir de cierta edad, los perros pueden necesitar una limpieza dental anual o bianual. Depende de cada caso. En líneas generales, puede decirse que los perros de razas pequeñas suelen acumular más sarro y suelen necesitar una atención mayor en cuanto a higiene dental.


Riesgos de una mala higiene


Los riesgos más evidentes de una mala higiene dental en los perros son los siguientes:

  • Cuando la acumulación de sarro no se trata, se puede producir una inflamación y retracción de las encías que puede descalzar el diente y provocar caídas.
  • Mal aliento (halitosis).
  • Sarro perros
  • Puede ir a más
  • Las bacterias de la placa pueden trasladarse a través del torrente circulatorio a órganos vitales como el corazón ocasionando problemas de endocarditis en las válvulas. Las bacterias pueden incluso acantonarse en huesos (La osteomielitis es la infección ósea, tanto cortical como medular) provocando mucho dolor y una artritis séptica).

¿Cómo se forma el sarro?

El sarro es la calcificación de la placa dental. Los restos de alimentos, junto con las bacterias presentes en la boca, van a formar la placa bacteriana o placa dental. Si la placa no se retira, al mezclarse con la saliva y los minerales presentes en ella, reaccionará formando una costra. La placa se calcifica y se forma el sarro.

El sarro, cuando se forma, es de color blanquecino pero a medida que pasa el tiempo se va poniendo amarillo y luego marrón.

Síntomas de una pobre higiene dental
La señal más obvia de una mala salud dental canina es el mal aliento.

Sin embargo, a veces no es tan fácil de detectar
Y hay perros que no se dejan abrir la boca por su dueño. Por ejemplo…

Recientemente nos trajeron a la clínica a un perro que parpadeaba de un ojo y decía su dueño que le picaba un lado de la cara. Tenía molestias y dificultad para comer, lo que había llevado a sus dueños a comprarle comida blanda (que suele ser un poco más cara y llevar más contenido en grasa) durante medio año. Después de una exploración oftalmológica, nos dimos cuenta de que el ojo tenía una úlcera en la córnea probablemente de rascarse . Además, el canto lateral del ojo estaba inflamado. Tenía lo que en humanos llamamos flemón pero como era un perro de pelo largo, no se le notaba a simple vista. Al abrirle la boca nos llamó la atención el ver una muela llena de sarro. Le realizamos una radiografía y encontramos una fístula que llegaba hasta la parte inferior del ojo.

Le tuvimos que extraer la muela. Tras esto, el ojo se curó completamente con unos colirios y una lentilla protectora de úlcera. Afortunadamente, la úlcera no profundizó y no perforó el ojo. Ahora el perro come perfectamente a pesar de haber perdido una muela.

¿Cómo mantener la higiene dental de tu perro?
Hay varias maneras de prevenir problemas derivados de la salud dental de tu perro.

Limpiezas de dientes en casa
Es recomendable limpiar los dientes de tu perro semanal o diariamente si se puede. Existe una gran variedad de productos que se pueden utilizar:

Pastas de dientes.
Cepillos de dientes o dedales para el dedo índice, que hacen más fácil la limpieza.
Colutorios para echar en agua de bebida o directamente sobre el diente en líquido o en spray.

En la Clínica Tus Veterinarios enseñamos a nuestros clientes a tomar el hábito de limpiar los dientes de sus perros desde que son cachorros. Esto responde a nuestro compromiso con la prevención de enfermedades caninas.

Hoy en día tenemos muchos clientes que limpian los dientes todos los días a su mascota, y como resultado, se ahorran el dinero de hacer limpiezas dentales profesionales y consiguen una mejor salud de su perro.


Limpiezas dentales profesionales de perros y gatos

Recomendamos hacer una limpieza dental especializada anualmente. La realizamos con un aparato de ultrasonidos que utiliza agua para quitar el sarro. Después, procedemos a pulir los dientes con un cepillo de alta velocidad y una pasta especial. Hacemos esto para proteger el esmalte.

La frecuencia de limpiezas dentales necesaria varía mucho entre razas. En general, las razas grandes tienen buena calidad de esmalte, por lo que no necesitan hacerlo tan a menudo e incluso pueden pasarse la vida sin requerir una limpieza. Sin embargo, razas pequeñas como el Yorkshire o el Maltés, deben hacérselas todos los años desde cachorros si se quiere conservar sus piezas dentales.

Otro factor fundamental es la calidad del pienso. Algunas marcas han diseñado croquetas que limpian la superficie del diente y de la muela al masticarse.

Ultrasonido para perros

¿Se necesita anestesia para las limpiezas dentales de perros y gatos?

La limpieza dental en perros no es una técnica que pueda practicarse sin anestesia general , aunque hay veces que los propietarios no quieren anestesiar y si tiene poco sarro y el perro es muy bueno se puede intentar…… , pero no se va a poder pulir ni acceder a todas la zona de la boca …. Además los limpiadores dentales van a irrigar agua y hay riesgo de aspiración a vías respiratorias si no se realiza una anestesia correcta con intubación traqueal . En resumen , sin anestesia no se va hacer una correcta limpieza dental.

Tampoco sirve la sedación ya que necesitamos que el animal esté totalmente quieto, y el veterinario tenga un acceso completo a todas sus piezas dentales y encías.

Alimentos para la limpieza dental

Hay que tener cierto cuidado a la hora de comprar determinados alimentos porque no todos son saludables. Algunos tienen demasiado contenido graso, que en exceso puede causar problemas cardiovasculares y obesidad.

Los mejores alimentos para los dientes son aquellos que están elaborados por empresas farmacéuticas y llevan componentes químicos con tratamientos específicos para el diente del perro. Esto implica no solo limpieza a través de la acción mecánica de morder sino también un tratamiento antibacteriano para prevenir el sarro.

Conclusión

Si eres como la mayoría de dueños, por falta de tiempo , es probable que no estés prestando la suficiente atención a la limpieza dental de tu perro. Por eso te animamos a que comiences a limpiar los dientes de tu perro y consideres atender a su higiene bucal con frecuencia.

Estas simples medidas pueden conllevar a que tu perro tenga una vida más larga y mucho más saludable.

Si te resulta imposible introducir un cepillo de dientes a tu perro en la boca, pásate con él por clínica Tus Veterinarios y te explicamos cómo hacerlo.

Necesitas hacer una limpieza dental profesional a tu mascota?
Llámanos al 622575274 o contacta con nosotros

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

¡Hola!