Git Product home page Git Product logo

random-word's Introduction

random-word

Build PyPI version PyPI - Python Version PyPI - Status Downloads License: MIT

This is a simple python package to generate random English words. If you need help after reading the below, please find me on Twitter at @vaibhavsingh97.

If you love the package, please ๐ŸŒŸ the repo.

Installation

You should be able to install using easy_install or pip in the usual ways:

$ easy_install random-word
$ pip install random-word

Or clone this repository and run:

$ python3 setup.py install

Or place the random-word folder that you downloaded somewhere where your scripts can access it.

Basic Usage

๐Ÿ‘‹ This package will now, by default, fetch the random word from local database

from random_word import RandomWords
r = RandomWords()

# Return a single random word
r.get_random_word()

Different services are available as a part of the random word package, which fetches random words from various API providers. Please check the Services section for more details.

Services

Development

Assuming that you have Python and pipenv installed, set up your environment and install the required dependencies like this instead of the pip install random-word defined above:

$ git clone https://github.com/vaibhavsingh97/random-word.git
$ cd random-word
$ make init

Add API Key in random_word directory defining API Key in config.yml. If you don't have an API key, then request your API key [here][wornikWebsiteLink]

API_KEY = "<API KEY>"

To check your desired changes, you can install your package locally.

$ pip install -e .

Issues

You can report the bugs at the issue tracker

License

Built with โ™ฅ by Vaibhav Singh(@vaibhavsingh97) under MIT License

You can find a copy of the License at https://vaibhavsingh97.mit-license.org/

random-word's People

Contributors

dependabot[bot] avatar jatin69 avatar jkterry1 avatar nkstonks avatar theblueskies avatar vaibhavsingh97 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

random-word's Issues

Don't mix camelCase and underscore_case

Is your feature request related to a problem? Please describe.
I love this project, but don't like how it mixes camel case (i.e. for parameter names) with underscore (i.e. function names).

Describe the solution you'd like
Choosing one and sticking with it; preferably underscore_case as that's Python standard.

Describe alternatives you've considered
N/A

Additional context
I am happy to implement this myself if you say I can.

get_random_words() returns error every time.

Describe the bug
Keep getting unexpected Exception "Error occured, No result found...."

To Reproduce
Steps to reproduce the behavior:
``

from random_word import RandomWords
r = RandomWords()
r.get_random_words()

Traceback (most recent call last):
File "", line 1, in
File "/Users/ewilens/anaconda3/lib/python3.8/site-packages/random_word/random_word.py", line 111, in get_random_words
raise Exception(
Exception: Error occured, No result found. If you think this was a mistake than raise issue at https://github.com/vaibhavsingh97/random-word/issues
``

Expected behavior
I expected a list of random words to be printed to stdout

Screenshots
If applicable, add screenshots to help explain your problem.

Environment (please complete the following information):

  • MacOS 10.15.7 conda

Allow direct importing/use of package

Is your feature request related to a problem? Please describe.
I don't quite see why it should be necessary to instantiate this package.

Describe the solution you'd like
Revision of code so that one can simply do:

import random_word
random_word.get_random_word(...)

Describe alternatives you've considered
N/A

Additional context
Again, if you're okay with it I can implement this myself.

get_random_word() function bug

The get_random_word() function is outputting the message: """Exception: Error occurred, No result found. If you think this was a mistake than raise issue at https://github.com/vaibhavsingh97/random-word/issues"
It is not letting me create a random word. After multiple times of using the functions, it is printing errors

I was expecting it to return a random word without any errors.

OS- Windows 10
Python 3.8

Lots of error messages like this

Nice package. Except these error messages pretty often:

'snortle'

r.get_random_word()
'lophyropoda'
r.get_random_word()
'organolithium'
r.get_random_word()
'foresightful'
r.get_random_word()
'Vesuvius'
r.get_random_word()
'creels'
r.get_random_word()
'knockdowns'
r.get_random_word()
Traceback (most recent call last):
File "", line 1, in
File "/usr/local/lib/python3.7/site-packages/random_word/random_word.py", lin
e 60, in get_random_word
"Error occured, No result found. If you think this was a mistake than raise
issue at {}".format(self.issue_url))
Exception: Error occured, No result found. If you think this was a mistake than
raise issue at https://github.com/vaibhavsingh97/random-word/issues

problem with defining word type in random_word().

When I add keywords to narrow down the word params it gives an error saying that there is an unexpected keyword. TypeError: random_word() got an unexpected keyword argument 'minLength'
To Reproduce
from random_words import RandomWords
rw = RandomWords()

word = rw.random_word(minLength=2)

print(word)

Expected behavior
To get a word with always more then 2 characters.

Screenshots
If applicable, add screenshots to help explain your problem.

Environment (please complete the following information):

  • OS: Windows 10 Home
  • Python 3.9

Additional context
Add any other context about the problem here.

Update Readme

Expected Behaviour
There should be instructions to prevent this error

Actual Behaviour
There are no instructions to add API key to the project and because of those new contributors who clone to project will receive ImportError: cannot import name 'config' error

Context
Add following lines in the readme.md under Basic Setup

To add API Key, add config.py in random_word directory defining API Key

API_KEY = "<API KEY>"

Module fails: No result found

Describe the bug
Module is completely broken for me. Is it for others?

To Reproduce

>>> from random_word import RandomWords
>>> r = RandomWords()
>>> r.get_random_words()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Xevion\AppData\Local\Programs\Python\Python36\lib\site-packages\random_word\random_word.py", line 112, in get_random_words
    "Error occured, No result found. If you think this was a mistake than raise issue at {}".format(self.issue_url))
Exception: Error occured, No result found. If you think this was a mistake than raise issue at https://github.com/vaibhavsingh97/random-word/issues
>>> r.get_random_word()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Xevion\AppData\Local\Programs\Python\Python36\lib\site-packages\random_word\random_word.py", line 60, in get_random_word
    "Error occured, No result found. If you think this was a mistake than raise issue at {}".format(self.issue_url))
Exception: Error occured, No result found. If you think this was a mistake than raise issue at https://github.com/vaibhavsingh97/random-word/issues

Expected behavior
Normal functionality.

Environment (please complete the following information):

  • OS: Windows
  • Python 3.6.7

Additional context
Had just installed it a second ago. Sorry if it's something dumb, it said to ask here if it's an error, and I think it is...?

Console error

Describe the bug
I get an error in console when I open a file (see screenshot)

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Call function '....'
  3. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
http://prntscr.com/okxo5l

Environment (please complete the following information):

  • OS: Windows
  • Python 3.6

Additional context
Add any other context about the problem here.

GET A RANDOM WORD FROM A SPECIFIC LETTER

from random_word import RandomWords
r = RandomWords()
x = r.get_random_word(letter=b, minLength=10, maxLength=10)
print (x)

how to get random word from an alphabet [argument]

word_of_the_day returning None

Describe the bug
Instead of returning a json it returns None

To Reproduce
Steps to reproduce the behavior:

from random_word import RandomWords
r = RandomWords()
word_of_the_day_dict = json.loads(r.word_of_the_day())

Expected behavior
The idea is that it returns a json string

Screenshots
image

Environment:

  • OS: Windows 10
  • Python 3.9.2

setup.py install bug

See error below:

justinkterry@patternsearch:~/random-word$ sudo python3 setup.py install
Traceback (most recent call last):
  File "setup.py", line 1, in <module>
    import random_word
  File "/home/justinkterry/random-word/random_word/__init__.py", line 1, in <module>
    from .random_word import RandomWords
  File "/home/justinkterry/random-word/random_word/random_word.py", line 4, in <module>
    from . import config
ImportError: cannot import name 'config'

Error: No result found

Describe the bug

site-packages\random_word\random_word.py", line 58, in get_random_word
"Error occured, No result found. If you think this was a mistake than raise issue at {}".format(self.issue_url))
Exception: Error occured, No result found. If you think this was a mistake than raise issue at https://github.com/vaibhavsingh97/random-word/issues

To Reproduce
Steps to reproduce the behavior:

r = RandomWords()
word = r.get_random_word()

Expected behavior
Word variable should get a random word assigned.

Screenshots
If applicable, add screenshots to help explain your problem.
No....

Environment (please complete the following information):

  • OS: Windows 10
  • Python 3.6 (64bit)

Additional context
Add any other context about the problem here.

Error: No result found after .py file containing get_random_word() call is run multiple times

Describe the bug
After running a .py file that uses get_random_word() or get_random_words() multiple times (usually around 10 times), Error occurs and will continue to occur if user tries to run the file again.

To Reproduce
Steps to reproduce the behavior:

  1. Create a file named "randomWordTest.py" and fill it with the following:
from random_word import RandomWords
r = RandomWords()
r.get_random_word()
  1. In the command prompt, navigate to the file's location and run "python randomWordTest.py"
    A random word should appear.

  2. repeat step 2 multiple times, around 10. Eventually, the following error will occur:

Error occurred, No result found. If you think this was a mistake than raise issue at {}".format(self.issue_url))
Exception: Error occurred, No result found. If you think this was a mistake than raise issue at https://github.com/vaibhavsingh97/random-word/issues

This error will continue to occur about 95% of the time whenever randomWordTest.py is run. Changing the file and then saving it seems to bring user back to step 1.

Expected behavior
randomWordTest.py should return a random word every time.

Environment (please complete the following information):

  • Windows 10
  • Python 3.7.3

Additional context
I'm new to python, so there's a chance I'm doing something incorrectly.
I seem to have followed all steps for installation and usage of the package correctly, though.

No result found at word_of_the_day()

Describe the bug

>>> r.word_of_the_day()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\billy\AppData\Roaming\Python\Python38\site-packages\random_word\random_word.py", line 148, in word_of_the_day
    raise Exception(
Exception: Error occured, No result found. If you think this was a mistake than raise issue at https://github.com/vaibhavsingh97/random-word/issues

To Reproduce
Steps to reproduce the behavior:

  1. open python console
  2. from random_word import RandomWords
  3. r = RandomWords()
  4. r.word_of_the_day()

Expected behavior
shows word of the day

Screenshots
image

Environment (please complete the following information):

  • OS: Windows 10
  • Python 3.8

Additional context
...

r.get_random_words() sometimes returns an empty list

Describe the bug
r.get_random_words() sometimes returns an empty list.
Is that a problem with API used to generate words?

To Reproduce

def generate_randome():
    r = RandomWords()
    the_list = r.get_random_words(limit=10)

ModuleNotFoundError: No module named 'yaml'

I am trying to import the functions using:
from random_word import RandomWords

and all I get is the the message:
ModuleNotFoundError: No module named 'yaml'

I used pip install

Error when trying to obtain a random word

Description

Code

from django.shortcuts import render
from random_word import RandomWords

def hangman(request):
    return render(request,'hangman/plain_page_2.html')

def hangman_org(request):    
    r = RandomWords()
    guess = request.POST.get('guess')
    w_len = request.POST.get('w_len')
    lst = []
    word = r.get_random_word(hasDictionaryDef="true",minLength=w_len,maxLength=w_len)
    count=0
    word = word.lower()
    length = len(word)
    for i in range(1,length+1):
        lst.append(i)
    context = {
        'guess' : guess,
        'lst' : lst,
        'hmword' : word
        }
    return render(request,'hangman/plain_page.html',context)

Expected behavior
A Random Word must be generated without encountering the above mentioned error.

Environment (please complete the following information):

  • OS: Windows
  • Python 3.7

Cant run the code, am getting an unexpected error message

Describe the bug
when i try to print the random word i am getting the error message
Error occured, No result found. If you think this was a mistake than raise issue at https://github.com/vaibhavsingh97/random-word/issues

To Reproduce

from random_word import RandomWords
w = RandomWords()

word = w.get_random_word()
print(word)

Expected behavior
it is supposed to print a random word

Environment (please complete the following information):

  • OS: Windows
  • Python: 3.8.5

Screenshots
If applicable, add screenshots to help explain your problem.

1
2

pyyaml dependency being ignored

Describe the bug
in a fresh venv, installing latest version of RandomWorkds (1.0.7) isn't including pyyaml. I see that it's in the Pipenv file though.

To Reproduce
Steps to reproduce the behavior:

  1. Create fresh venv
  2. pip install random-words
  3. start python interpreter
  4. from random_words import RandomWords

Expected behavior
should import.

Screenshots
If applicable, add screenshots to help explain your problem.

Environment (please complete the following information):
using python 3.9.2 on a Mac, installed via homebrew.

Screen Shot 2021-04-03 at 7 47 17 AM

Meaning of random word

Is your feature request related to a problem? Please describe.
Right now, random-word gives only random words. If someone wants to know the meaning of random words than user would not able to

Describe the solution you'd like
There should be a function which when called should give meaning to the word.

Additional context
Look at https://developer.wordnik.com/docsdocs and implement the same ๐Ÿ˜„

Is this a mistake on my end or no?

Traceback (most recent call last):
File "/Users/janemo/Documents/Hangman.py", line 3, in
word = r.get_random_word()
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/random_word/random_word.py", line 59, in get_random_word
raise Exception(
Exception: Error occured, No result found. If you think this was a mistake than raise issue at https://github.com/vaibhavsingh97/random-word/issues

Broken package

Describe the bug
On Replit it will not run there must be an broken package

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Call function '....'
  3. See error

Expected behavior
To run without error

Screenshots
If applicable, add screenshots to help explain your problem.

Environment (please complete the following information):

  • OS: [e.g. MacOS, Linux, Windows]
  • Python [e.g. 2.7, 3.6, 3.7]

Additional context
Add any other context about the problem here.

Test cases are not working

Describe the bug
There should be an automated test. Right now We have tests https://github.com/vaibhavsingh97/random-word/blob/master/random_word/tests/test_word.py but it's not working when we run nosetests

To Reproduce
Steps to reproduce the behavior:

  1. open terminal and navigate to random-word repo
  2. run nosetests
  3. Shows run 0 tests

Expected behavior
Test should run as expected

Screenshots
image

Environment (please complete the following information):

  • OS: Darwin 16.7.0 Darwin Kernel Version 16.7.0: Fri Apr 27 17:59:46 PDT 2018; root:xnu-3789.73.13~1/RELEASE_X86_64 x86_64
  • Python 3.7.0

Additional context
N/A

Definition of words

Describe the solution you'd like
Definitions of the words can be pulled from a third party dictionary like merriam Webster or oxford. It would be great for providing user the definition of the word in python powered word game.

Configuration values in environment

Is your feature request related to a problem? Please describe.
The API key, used in the module is coming from an encrypted config file, would it not be a better idea to take this configuration value away from a file that is committed in VCS. It can also be helpful as it won't allow the possibility of someone finding that encryption and (if possible) breaking it to gain the API key (which i believe is yours). Point of this feature request being giving the end user (developer or the consumer) the ability to allow them to use their own API key without forking this repo and changing the code here.

Describe the solution you'd like
A quick solution that delegates the SECRET management away from this module would be to store the API key in the environment in which it is hosted and then at the time of usage simply do something like
API_KEY = os.environ.get('API_KEY')
It would allow the Secrets to stay out of VCS where they can be altered (not easily though) by someone. Also, In this manner as a side effect it would be easy for developers to use their own API keys. Again if we consider the case that the underlying APIs decide to implement RateLimiting for API Calls, it would not be a good idea to distribute your module with your API key.

Describe alternatives you've considered
One more alternative i can think of is that right at the time of Instantiation we can pass the API key directly as a param in the constructor or give a path to a config file (in json, ini or yaml format, whichever suits best)
obj = RandomWords(api_key=os.environ.get('API_KEY'))
or
obj = RandomWords(config='/path/to/config.file')

Additional context
This feature request is based upon the 12 Factor application paradigm.

I would be more than willing to work on this feature request, if it is decided to work upon.

add yaml to dependancies

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Call function '....'
  3. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Environment (please complete the following information):

  • OS: [e.g. MacOS, Linux, Windows]
  • Python [e.g. 2.7, 3.6, 3.7]

Additional context
Add any other context about the problem here.

Support conda install in addition to PyPI

I've been using this for a data science task, and most of the systems I use are all on conda. Could you please distribute this to the conda repo in addition to PyPI

API key expired?

Describe the bug
I was using this package with a discord bot to generate random words and it worked fine up until last Friday. The error it throws points to line #24 in random_word.py which tells me "API key either expired or not working. Please raise issue at..."

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Call function '....'
  3. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
https://i.imgur.com/aVmmdEx.png

Environment (please complete the following information):

  • OS: [Windows 10]
  • Python [3.6.8]

Additional context
Add any other context about the problem here.

get_random_word() & get_random_words() return a NoneType....!!

Describe the bug
At some point in type I'm encountering a NoneType in my code, which I'm unable to try and catch nor ignore it by another method..!

To Reproduce
Steps to reproduce the behavior:
here is a code screen shot:

image

code:

import random

rwd = RandomWords()
choice = random.randint(0, 14)

print(choice)
word = rwd.get_random_words(limit=15)
print(word, '\n')
new_word = word[choice]
print(new_word)

Expected behavior
Need to generate words or at least return a English word

Screenshots
Error Screen Shot
image

Environment (please complete the following information):

  • OS: [Linux]
  • Python [3.9]

Error Occurred, No result found

Description
Error while using the module with random - word failing to generate a word

To Reproduce
from random_word import RandomWords
import time

r = RandomWords()

def word_array(primo):
word_arr = []
for x in range (len(primo)):
word_arr.append(primo[x])

return word_arr

def gap():
print("")
print("")

print("Welcome to Hangman!")
time.sleep(0.5)
print("Ready to play?")
gap()
time.sleep(1)
word = r.get_random_word(minLength = 4, maxLength = 8, hasDictionaryDef = "true")
print(word)

Expected behavior
Expected to get a word.

Environment (please complete the following information):

  • OS: [Windows]
  • Python [3.7]

Timeout Error

Hi, when I run the code, it returns a timeout error.
Is this package limited to Iranian?
code
error

Support specifying API_KEY in pyproject.toml

I use Poetry for installing my Python dependencies. Currently I don't see an easy way to specify my own API key for random-word in my pyproject.toml.

Ideally there would be a way to provide my own API key within my pyproject.toml so that it is used when the package is installed using Poetry.

Circular Import

Describe the bug
When I run my program with the example of hacDictionaryDef or any other example it won't run because of a circular import.

Expected behavior
It runs my program.

Environment (please complete the following information):

  • OS: PoPos 21.04
  • Python 3.9.5

Very slow performance

Description
Thanks for working on this project. I just wanted to note that there is lots of room for improvement in the performance department. A quick test:

start = time.time()
words = [r.get_random_word() for i in range(100)]
duration = end = time.time()

# duration is 30.501307725906372 seconds

Steps to Reproduce

  1. Call any random word method
  2. Observe how incredibly slow everything is.

Expected behavior
I understand the constraints of entropy, but I would expect something a bit faster than what I'm currently seeing.

Environment (please complete the following information):

  • OS: Mac OS (2020 Macbook Pro)
  • Python 3.9

Support plain length parameter

Is your feature request related to a problem? Please describe.
My project calls for generating words of length n, rather than a range. It feels a little clunky to have to say minLength=n, maxLength=n.

Describe the solution you'd like
Implementation of a length parameter to get a word of length n.

Describe alternatives you've considered
N/A

Additional context
With your permission, I will implement this myself.

be able to "get" Corpus count of random word on part of speech

Is your feature request related to a problem? Please describe.
I would like to output the Corpus count of words so the user knows it.

Describe the solution you'd like
To have a function like get_corpus() that returns corpus count for given word.

RandomWords stopped working

I had some functioning code that used RandomWords, and it started throwing the error below out of the blue.

I tried copying the sample code directly from the documentation, and I got the same error.

from random_word import RandomWords
r = RandomWords()

  File "<input>", line 2, in <module>
  File "/Users/bryandelerson/PycharmProjects/meraki/venv/lib/python3.7/site-packages/random_word/random_word.py", line 24, in __init__
    self.issue_url)
TypeError: exceptions must derive from BaseException

Provide alternate method to generate random word than an API fetch

Is your feature request related to a problem? Please describe.
I'm trying to use this package to generate 1000's words in a loop, but even with time.sleep() implementations I'm not getting http 200 success for every call.

Describe the solution you'd like
Provide an option to get random words through some local package of words I'd have to download

Hide the API key from public

Describe the bug
An API key should not be exposed to the public.

To Reproduce
Right now I am maintaining config.py to use API key, and added to gitignore

config.py

This is the reason Travis CI build is also failing (https://travis-ci.org/vaibhavsingh97/random-word)

Expected behavior
There should be someway we can use API key when the package is run else it's encrypted and have no value to the public

Additional context
Adding JWT authentication and we can have API key without exposing to the public

Function .get_random_word returns None too often (% depends of parameters)

The get_random_word function returns None to often
When called with various parameters, it returns None rather than a word...

To Reproduce
Here is the code to test on your own:

from random_word import RandomWords
r=RandomWords()
for i in range (100):
	word=r.get_random_word(hasDictionaryDef="true")
	print(word)

Expected behavior
I would have expected for a word to be returned for each case, it becomes enev more obvious when you add a maxLength (in my case but probably with other parameters too)

Screenshots
This is a screenshot with following parameters:

hasDictionaryDef="true"
maxLength=10

words_lenght10_dicdef

Environment (please complete the following information):

  • OS: Windows
  • Python [3.10]

Additional Informations
Do not hesitate to comment for any additionnal informations towards my issue!

Greetings
Thank you for taking time to read and I hope we will be able to fix this issue!
Bilal.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.